像许多人问这个问题一样,我对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
非常感谢您的时间和任何帮助是非常感谢。
2条答案
按热度按时间92dk7w1h1#
错误指出类的名称应该在
: public
和{
之间:Currency
不是类的名称,因为您没有定义该类。是的,您在Currency.cpp
和Currency.h
文件中定义了该类,但在出现错误的Dollar.h
文件中没有定义该类。解决方案:类
Currency
必须先定义,然后才能用作基类。由于类必须在所有使用它的源文件中定义,并且定义必须在所有源文件中相同,因此在单独的“头文件”中定义类通常是有用的,就像您所做的那样。在这种情况下,您可以简单地包括头文件,而不是在每个源文件中重复编写定义:
Currency.cpp
包含类Currency
的两个定义。一个在包含的标头中,第二个在标头之后。在单个源文件中,同一个类不能有多个定义。解决方案:从
Currency.cpp
中删除类定义,而只定义成员函数:最后,你没有定义
Dollar::printStatement
,你定义了printStatement
,这不是一回事。rlcwz9us2#
在我的例子中,我有两个类具有相同的名称,但是在两个不同的名称空间中。
因此,将基类更改为不同的类就解决了问题。