2016-11-06 127 views
-3

我對C++(java背景)相當陌生,我試圖訪問我創建的類的成員,但在嘗試調用成員時收到錯誤消息一個類,它是說變量不是該類的成員。C++:類未被識別的成員

任何想法爲什麼會發生這種情況?我看的人這個問題,讓許多其他的例子,但他們都沒有幫我找出原因

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); 
} 

我遇到麻煩的成員是名單adress_buch。任何時候我嘗試調用它,它說它不是一個成員,即使它是在頭文件類中定義的?在main()的

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

你需要'的#include「KONTAKT .h「在標題中。 –

+0

對不起,我在我的實際代碼中,只是忘了把它放在這裏的主代碼部分 – NoName

+0

你需要學習一些基本的C++。 – juanchopanza

回答

0

首先最小的,完全可驗證例如第19行,它包含什麼,但引發的錯誤所需要的代碼

錯誤消息:

#include <list> 
using namespace std; 

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

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

這就是所有的需要,多一點,找到問題。沒有別的方式,因爲分心問題很容易被發現。我在Visual Studio編譯器沒有大師,我沒有一個可用的,但我打賭某處警告或錯誤是這一行:

list<int> Adressbuch::adress_buch; 

adress_buch被定義不正確造成種種的未來的問題。編譯這個例子中,GCC給出:

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

一個修正的例子是

#include <list> 
using namespace std; 

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

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

或者更好

#include <list> 

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

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

因爲the notorious, bug-hiding using namespace std;已被刪除

+0

感謝這個例子,將來會使用這種做法,同時加入std :: cast似乎可以修復我的錯誤 – NoName