C++:class 的成员未被识别

C++ : Member of class not being recognised

我是 c++ 的新手(java 背景),我正在尝试访问我创建的 class 的成员,但在尝试调用时我不断收到错误消息class 的成员,表示该变量不是 class.

的成员

知道为什么会这样吗?我看过很多其他遇到此问题的人的例子,但其中 none 帮助我找出了原因

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。每当我尝试调用它时,它都说它不是成员,即使它是在 header class?

中定义的

main() 第 19 行的错误信息

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  

首先是一个最小的、完整的可验证示例,其中仅包含触发错误所需的代码:

#include <list>
using namespace std;

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

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

这就是找到问题所需的全部内容。没有其他障碍,因为分心问题 1 很容易被发现。我不是 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;已被移除