Encabezados de clase y uso de constructores en mi archivo de clase .cpp: "error: la clase 'Prueba' no tiene ningún campo llamado 'contador'"

Me encontré con un problema en el que el constructor no puede acceder a un campo en mi clase en su archivo .cpp, por razones desconocidas para mí, .cpp no ​​lo hereda y no puedo construirlo para usarlo en el resto de mi programa
Aquí está la clase que contiene los campos que deseo construir en Test.h

class Test
{
public:
    Test();
    virtual ~Test();
    void count();
    int counter();
};

Y aquí está el constructor del campo 'contador' en Test.cpp

Test::Test() : counter(0){}

Según mi conocimiento de C++, esto debería ser correcto ya que Test.cpp contiene #include "Test.h" y el mismo código funciona exactamente al escribir y construir clases cuando se usa solo main.cpp y sin encabezados, ¿alguna idea?

preguntado el 31 de julio de 12 a las 14:07

2 Respuestas

int counter(); es una declaración de función. quitar el ().

Respondido 31 Jul 12, 14:07

¡Impresionante! Muchas gracias, hice lo que dijiste y también tuve que cambiar Test::Test() : counter(0){} a Test::Test(){ counter = 0; } ahora funciona perfectamente ^^ y sobre mí usando () después de declarar un número entero... se golpea a sí mismo Necesito salir de la mentalidad de Javascript, he estado usando Unity3D demasiado recientemente. jerga total

@TotalJargon, ¿Por qué tuviste que mover la otra parte? Estuvo bien. De hecho, debería ser preferible. - Chris

@TotalJargon ¡todas las respuestas estaban en los comentarios de su hilo anterior! - juanchopanza

no, mi problema fue que fui lo suficientemente tonto como para crear 'contador' como un método en lugar de una variable, me ayudaste mucho pero pensé que podría haber sido un problema más serio, eliminaré el hilo si piensas es mejor, pero como no he encontrado ningún otro hilo con esta solución, ¿no sería mejor dejar esto para que alguien más pueda resolver un problema similar al mío antes? - jerga total

@TotalJargon está bien, pero te dije cómo definir counter como miembro de datos. Simplemente deje este hilo como está, no hay razón para eliminarlo. - juanchopanza

Test::Test() : counter(0){} - debe inicializar sus variables miembro aquí, no llamar a las funciones miembro.

Supongo que quisiste decir:

class Test
{
public:
    Test();
    virtual ~Test();
    void count();
    int counter; // no ()
};

Como sugirió Yuri

Respondido 31 Jul 12, 14:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.