c++ 标记"{"前应为类名-带有头文件和cpp文件

pw136qt2  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(148)

像许多人问这个问题一样,我对C++非常陌生,我无法理解这个错误:

Dollar.h:4:31: error: expected class-name before '{' token
    class Dollar: public Currency {

这些是我的文件

主.cpp

#include <iostream>
#include "Dollar.h"

using namespace std;

int main() {
    Dollar * d = new Dollar();
    d->printStatement();
    return 0;
}

货币.cpp

#include <iostream>
#include "Currency.h"

using namespace std;

class Currency {
    public:
        virtual void printStatement() {
            cout << "I am parent";
        }
};

货币h

#ifndef CURRENCY_H
#define CURRENCY_H

class Currency {
    public:
        virtual void printStatement();
};

#endif

美元.cpp

#include <iostream>
using namespace std;

void printStatement() {
    cout << "I am dollar";
}

美元.h

#ifndef DOLLAR_H
#ifndef DOLLAR_H

class Dollar : public Currency {
    public:
        void printStatement();
};

#endif

非常感谢您的时间和任何帮助是非常感谢。

92dk7w1h

92dk7w1h1#

错误指出类的名称应该在: public{之间:

class Dollar : public Currency {
                      ^^^^^^^^

Currency不是类的名称,因为您没有定义该类。是的,您在Currency.cppCurrency.h文件中定义了该类,但在出现错误的Dollar.h文件中没有定义该类。
解决方案:类Currency必须先定义,然后才能用作基类。

// class is defined first
class Currency {
    public:
        virtual void printStatement();
};

// now Currency is a class and it can be used as a base
class Dollar : public Currency {
    public:
        void printStatement();
};

由于类必须在所有使用它的源文件中定义,并且定义必须在所有源文件中相同,因此在单独的“头文件”中定义类通常是有用的,就像您所做的那样。在这种情况下,您可以简单地包括头文件,而不是在每个源文件中重复编写定义:

#include "Currency.h"

Currency.cpp包含类Currency的两个定义。一个在包含的标头中,第二个在标头之后。在单个源文件中,同一个类不能有多个定义。
解决方案:从Currency.cpp中删除类定义,而只定义成员函数:

void Currency::printStatement() {
    //...
}

最后,你没有定义Dollar::printStatement,你定义了printStatement,这不是一回事。

rlcwz9us

rlcwz9us2#

在我的例子中,我有两个类具有相同的名称,但是在两个不同的名称空间中
因此,将基类更改为不同的类就解决了问题。

相关问题