我有两个类,并希望从类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”
等等。
答案 0 :(得分:4)
头文件不能互相包含。而不是#includes,在一个或两个中尝试前向声明,如下所示:
class Kunde;
答案 1 :(得分:2)
您有循环包含问题。您在头文件的第一行看到#pragma once
语句?如果已包含标题,则可以防止包含标题。由于您的标题文件彼此包含,因此在Kunde
或Konto
的声明中,尚未定义另一个。
如果您在另一个头文件中对任一类进行简单的前向声明,则可以避免此问题。具体做法是:
(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; ... };另一种方法是抽象出一个可以满足你想要的界面。如果你愿意,我可以进一步详细介绍这种方法。