Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema Con Clases

Iniciado por AlexHdez, 04 de Mayo de 2004, 07:00:40 PM

« anterior - próximo »

AlexHdez

 Mirad, tengo una clase que "deberia" escribir en un fichero de texto algo asi:

Creando screen --------------------- done

ó

Creando screen --------------------- failed

segun si falla o no la creacion de screen (screen como cualquier otra cosa donde yo ponga el if. Mis codigos son:

Log.cpp:

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>

static void PutInfo(char Name[], bool Done, char File[])

{

if(Done == true)

{
 
 char Done[] = "done";

}

else

{
 
 char Done[] = "failed";

}

std::ofstream fs(File);
fs << Name << "---------------->" << Done;

}


y

Log.h:

class Log

{

public:

static void PutInfo(char Name[], bool Done, char File[]);

};


Y en main pondria algo asi:

SDL_Surface* screen;

Log::PutInfo("Creando screen", true, "log.txt");


Soy consciente de que es una chorrada pero no se que le pasa. Al compilar no da errores pero al linkar da unresolved simbol. Debe ser una estupidez pero se poco, si alguien puede echarme un cable le estaría muy agradecido... thx

Un saludo

DraKKaR

 Hola, espero no andar un poco despistado como la última vez que ayudé a resolver una duda de C XD.
Creo que el problema es que en la implementación de la función Log::PutInfo (en el log.cpp) te has olvidado poner el (Log::). El código resultante quedaria como:


#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>

static void Log::PutInfo(char Name[], bool Done, char File[])

{
...
if(Done == true)



No te da un error de ejecución pq ael compilador asume que la función Log::PutInfo (que no es lo mismo que PutInfo) se implementará en algún otro módulo, y al no encontrarla en ninguno, da ese error de linkado.


Saludos.

AlexHdez

  (nooo)  (nooo)  (nooo)

Soy memo, bueno Drakkar, esta vez has dao en el clavo, muchas gracias!!!  (ole)  (ole)  

Schaffer

 Mmm, por cierto igual no has puesto el codigo exacto que usas, pero la variable que declaras dentro del if no estara accesible fuera de el, y si no peta es porque tienes un bool q se llama tambien Done.

Supongo que tu querias poner esto, aparte del fallo que te ha corregido DraKKaR:
static void PutInfo(char Name[], bool Done, char File[])

{

char *done;

if(Done)
{

done = "done";

}
else
{

done = "failed";

}

std::ofstream fs(File);
fs << Name << "---------------->" << done;

}


Espero que te sirva de algo.

AlexHdez

 Si, eso me di cuenta despues y lo solucione muchas gracias de todas formas. Parece que ahora escribe en el archivo pero si ejecuto mi clase mas de una vez se sobreescribe y la idea es que pusiera las cosas una detras de otra,  :(

A ver si consigo hacerlo

Un saludo y thx

ShAq

 tendras que añadirle el flag
ios_base::app
en el constructor, para
que inserte al final del fichero,
un saludo

AlexHdez

 #include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include "Log.h"
using namespace std;

void Log::PutInfo(char Name[], bool Done, char File[])

{

char *done;

if(Done)
{

done = "done";

}
else
{

done = "failed";

}

std::ofstream fs(File, ios_base::app);
fs << Name << "---------------->" << done;

}


Solucionao!

Un saludo y gracias!

Grugnorr

 Array de char en el siglo XXI?, a la hoguera!  (twist)  
hat the hells!

AlexHdez

 Estoy abierto a todas tus sugerencias para solucionar esos valores,  ;)

Gracias!

DraKKaR

 Estoy con Grugnorr... todos a usar std::string como posesos!

Os paso la página que me abrió los ojos en muchos aspectos:
http://www.gamedev.net/reference/articles/...article2009.asp

[Edit: corregida lo de la dirección XD]

AlexHdez

 Socorro, has puesto dos veces http:// y he acabao en la web de microsoft,  (nooo)  (nooo)  (nooo)  (nooo)

Gracias por la page jeje, ahora mismo la miro

Un saludo






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.