2016-11-06 7 views
-3

Je suis assez nouveau en C++ (java background) et j'essaie d'accéder à un membre d'une classe que j'ai créée mais je reçois toujours un message d'erreur lorsque j'essaie d'appeler un membre de une classe, c'est dire que la variable n'est pas un membre de la classe.C++: Membre de la classe n'étant pas reconnu

Des idées pour lesquelles cela se passe? Je l'ai regardé tant d'autres exemples de personnes avec ce problème, mais aucun d'entre eux me ont aidé à trouver pourquoi

Main.cpp

#include "stdafx.h" 
#include "Adressbuch.h" 
#include "Kontakt.h" 
#include <iostream> 
#include <sstream> 

using namespace std; 

Adressbuch hinzufügen(Adressbuch buch); 
Adressbuch löschen(Adressbuch buch); 
void auflisten(Adressbuch buch); 

int main() 
{ 
bool end = true; 
Adressbuch buch; 
while (end) { 
    cout << "Bitte geben sie ein Aktion ein: (hinzufügen(h)/löschen(l)/beenden(b)/auflisten(a))" 
     << endl << "zur Zeit gibt es " << buch.adress_buch.size() << " Kontakte" << endl; 
    if (cin >> "h") buch = hinzufügen(buch); 
    else if (cin >> "l") buch = löschen(buch); 
    else if (cin >> "a") auflisten(buch); 
    else if (cin >> "b") end = true; 
    else cout << "Error. Ungultig Eingabe." << endl; 
} 
return 0; 

Adressbuch.h

#include "Kontakt.h" 
#include <list> 

class Adressbuch{ 
public: 
Adressbuch(); 
~Adressbuch(); 
void hinzufügen(Kontakt k); 
void löschen(Kontakt k); 

list<Kontakt> Adressbuch::adress_buch; 
}; 

Adressbuch.cpp

#include "Adressbuch.h" 
#include "Kontakt.h" 
#include <list> 
using namespace std; 

Adressbuch::Adressbuch(){ 
adress_buch; 
} 

Adressbuch::~Adressbuch(){ 
} 

void Adressbuch::hinzufügen(Kontakt k){ 
adress_buch.push_back(k); 
} 

void Adressbuch::löschen(Kontakt k) { 
adress_buch.remove(k); 
} 

Le membre qui me pose problème est la liste adresse_buch. Chaque fois que j'essaie de l'appeler, il dit que ce n'est pas un membre, même si elle est définie dans la classe d'en-tête?

Message d'erreur sur la ligne 19 du principal()

Severity Code Description Project File Line Suppression State 
Error C2039 'adress_buch': is not a member of 'Adressbuch' 
ConsoleApplication5 c:\users\gregs\documents\visual studio 
2015\projects\consoleapplication5\consoleapplication5\consoleapplication5.cpp  19 
+1

Vous devez '#include « Kontakt .h "' dans l'en-tête. –

+0

Désolé, j'ai fait dans mon code actuel, j'ai juste oublié de le mettre dans la partie code principal ici – NoName

+0

Et vous avez besoin d'apprendre quelques notions de base C++. – juanchopanza

Répondre

0

D'abord un exemple minimal, complet vérifiable qui ne contient que le code nécessaire pour déclencher l'erreur:

#include <list> 
using namespace std; 

class Adressbuch 
{ 
public: 
    list<int> Adressbuch::adress_buch; 
}; 
int main() 
{ 
    Adressbuch buch; 

    buch.adress_buch.size(); 
    return 0; 
} 

C'est tout ce qu'il faut , un peu plus que, pour trouver le problème. Avec rien d'autre comme un problème de distraction, je suis facile à repérer. Je ne suis pas un gourou dans le compilateur Visual Studio et je ne l'avez pas disponible, mais je parie que quelque part dans les avertissements ou erreurs est cette ligne:

list<int> Adressbuch::adress_buch; 

adress_buch est mal défini causant toutes sortes de problèmes futurs. Compiler cet exemple, GCC donne:

error: extra qualification 'Adressbuch::' on member 'adress_buch'

Un exemple est corrigé

#include <list> 
using namespace std; 

class Adressbuch 
{ 
public: 
    list<int> adress_buch; 
}; 
int main() 
{ 
    Adressbuch buch; 

    buch.adress_buch.size(); 
    return 0; 
} 

Ou mieux

#include <list> 

class Adressbuch 
{ 
public: 
    std::list<int> adress_buch; 
}; 
int main() 
{ 
    Adressbuch buch; 

    buch.adress_buch.size(); 
    return 0; 
} 

Parce que the notorious, bug-hiding using namespace std; a été supprimé

+0

merci pour l'exemple, utilisera cette pratique dans le futur, en ajoutant également le std :: cast semblait réparer l'erreur pour moi – NoName