2013-07-05 25 views
6

Ho un problema con l'accesso a una funzione da una classe con l'oggetto classe nel mio principale. Sto solo cercando di creare l'oggetto per la classe e di usare quell'oggetto per accedere alla funzione all'interno del file .cpp di quella classe. Continuo a ricevere un errore e ho persino creato il programma più semplice per testarlo e ricevo comunque un errore.La classe C++ non ha un membro chiamato

principale:

#include <iostream> 
#include "Attack.h" 

using namespace std; 

int main() 
{ 
    Attack attackObj; 
    attackObj.printShiz(); 
} 

Classe intestazione

#ifndef ATTACK_H 
#define ATTACK_H 

class Attack 
{ 
    public: 
     Attack(); 
     void printShiz(); 
    protected: 
    private: 
}; 

#endif // ATTACK_H 

Classe cpp

#include <iostream> 
#include "Attack.h" 
using namespace std; 

Attack::Attack(){ 

} 

void Attack::printShiz(){ 
    cout << "Test" << endl; 
} 

Come posso correggere questo errore? Ogni volta che provo ad accedere alla funzione printShiz nella classe Attack usando un oggetto nel mio main, ottengo un errore e non penso che questa funzione esista in questa classe.

Errore:

error: 'class Attack' has no member named 'printShiz' 
+1

Il codice sembra corretto. Forse sta cercando di usare una versione precedente dell'intestazione. – chris

+3

A volte un "Ricostruisci tutto" aggiusta tutto. – johnchen902

+0

Ho appena provato, ottenendo lo stesso errore:/ – Rapture686

risposta

0

Ti sei ricordato di includere la parentesi di chiusura nella principale?

#include <iostream> 
#include "Attack.h" 

using namespace std; 

int main() 
{ 
    Attack attackObj; 
    attackObj.printShiz(); 
} 
+0

Sì, ho appena lasciato per sbaglio il post. – Rapture686

-1

cercare di definire le funzioni a destra nell'intestazione

#ifndef ATTACK_H 
#define ATTACK_H 

class Attack { 
    public: 
     Attack(){}; 
     void printShiz(){}; 
    protected: 
    private: }; 

#endif // ATTACK_H 

e per la compilazione. Se il compilatore non si lamenta di definizioni duplicate significa che hai dimenticato di compilare il file Class.cpp, quindi devi semplicemente farlo (aggiungilo al tuo Makefile/progetto/soluzione ... quale toolchain stai usando?)

+0

La toolchain che sto usando è mingw32-g ++. Exe – Rapture686

+0

Come lo compili? Mostraci la riga di comando – doctorlove

+1

Se "ha dimenticato di compilare Class.cpp" che darebbe un errore di collegamento di riferimento non definito, non l'errore di compilazione mostrato –

10

Ho avuto un problema simile. È risultato che stavo includendo un vecchio file di intestazione con lo stesso nome da una vecchia cartella. Ho cancellato il vecchio file modificato la direttiva #include per indicare il mio nuovo file e tutto andava bene.

+0

Questa è la risposta corretta alla domanda. A volte succede. Si copia un file di intestazione in un altro percorso e si apportano modifiche ad esso, ma poiché da qualche parte nel progetto si include la vecchia intestazione, le modifiche alle funzioni membro, le variabili ecc non compaiono mai e si ottiene questo tipo di errori "strani". –

-1

So che questo è un anno vecchio ma ho appena incontrato con lo stesso problema. Il mio problema era che non avevo un costruttore nel mio file di implementazione. Penso che il problema qui potrebbe essere il commento segna alla fine del file di intestazione dopo il #endif ...

0

Hai un errore di battitura nel tuo .h? Una volta mi sono imbattuto in questo errore quando avevo il metodo chiamato correttamente nel mio main, ma con un refuso nel .h/.cpp (a "g" vs a "q" nel nome del metodo, il che rendeva un po 'difficile da individuare). rientra nella categoria "copia/incolla errore".

0

Non sono riuscito a trovare la risposta alla domanda, quindi ho provato e nessun errore.

ho compilato come in questo modo:

g++ -c class.cpp

g++ -c main.cpp

g++ -o main class.o main.o

Non v'è alcun errore, funziona bene. versione gcc utilizzata per la compilazione. gcc versione 4.1.2 20080704 (Red Hat 4.1.2-46)

Problemi correlati