类成员属性错误

Class member attributes error

本文关键字:错误 属性 成员      更新时间:2023-10-16

我有两个类,想要有一个从类Kunde到类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:缺少类型说明符 - 假定为 int。注意:C++不支持"默认整型"
konto.h(6):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++不支持"默认整型"

等等。

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

class Kunde;

您有一个循环包含问题。您在头文件的第一行看到 #pragma once 语句了吗?这样可以防止包含标头(如果已包含标头)。由于头文件相互包含,因此在声明KundeKonto时尚未定义另一个。

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

(康托)

#pragma once
// Do NOT include Kunde.h
class Kunde;
class Konto {
    // your further class definition as normal.

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

编辑:请参阅评论:)谢谢

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

肯定会混淆#pragma once

Konto 包含 Kunde.h,Kunde 包含 Konto.h。在这两种情况下都进行前向声明

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

孔托类;

类 昆德{ 康托* 康托;...};

另一种方法是抽象出一个给你你想要的东西的接口。如果你愿意,我可以更详细地介绍这种方法。