类成员属性错误

时间:2011-05-12 18:45:06

标签: c++

我有两个类,并希望从类Kunde到类Konto和向后引用,但我的编译器显示许多错误。我不知道问题是什么。请帮帮我。

Class Konto:

#pragma once
#include "Kunde.h"

class Konto {
private:
    Kunde* kunde;
protected:
    int kontonummer;
    double stand;
public:
    int getKontonummer();
    Kunde* getKunde();
    double getKontostand();
    bool einzahlen(double betrag);
    virtual bool auszahlen(double betrag);
};

昆德班:

#pragma once
#include "Konto.h"
#include <string>

class Kunde {
private:
    string vorname;
    string nachname;
    Konto* konto;
public:
    Kunde(string vorname, string nachname);
    void setKonto(Konto* konto);
    Konto* getKonto();
};

我得到以下编译器错误:

  

konto.h(6):错误C2143:语法错误:缺少';'在'*'之前   konto.h(6):错误C4430:缺少typespecifier - 假设为int。注意:C ++不支持“default-int”
  konto.h(6):错误C4430:缺少typespecifier - 假设为int。注意:C ++不支持“default-int”

等等。

5 个答案:

答案 0 :(得分:4)

头文件不能互相包含。而不是#includes,在一个或两个中尝试前向声明,如下所示:

class Kunde;

答案 1 :(得分:2)

您有循环包含问题。您在头文件的第一行看到#pragma once语句?如果已包含标题,则可以防止包含标题。由于您的标题文件彼此包含,因此在KundeKonto的声明中,尚未定义另一个。

如果您在另一个头文件中对任一类进行简单的前向声明,则可以避免此问题。具体做法是:

(Konto.h)

#pragma once

// Do NOT include Kunde.h

class Kunde;

class Konto {
    // your further class definition as normal.

唯一的问题是你现在应该在Kunde.h中包含Konto.cpp,否则会导致链接器错误。

编辑:见评论:)谢谢

答案 2 :(得分:1)

在另一个包含第一个文件的文件中包含一个文件,其中包含包含第一个文件的第二个文件...

肯定会混淆#pragma once

答案 3 :(得分:1)

Konto包括Kunde.h,Kunde包括Konto.h。在两种情况下都做前瞻声明

答案 4 :(得分:1)

这是一个经典的循环依赖。你可以通过几种方式处理它。第一种是使用您尝试引用的其他类的前向声明。您还需要删除其他类的include。

类Konto;

昆德班 {     Konto * konto; ... };

另一种方法是抽象出一个可以满足你想要的界面。如果你愿意,我可以进一步详细介绍这种方法。