就像很多人提出这个问题一样,我对C ++很陌生,我无法解决这个错误:
Dollar.h:4:31: error: expected class-name before '{' token
class Dollar: public Currency {
这些是我的文件
的main.cpp
#include <iostream>
#include "Dollar.h"
using namespace std;
int main() {
Dollar * d = new Dollar();
d->printStatement();
return 0;
}
Currency.cpp
#include <iostream>
#include "Currency.h"
using namespace std;
class Currency {
public:
virtual void printStatement() {
cout << "I am parent";
}
};
Currency.h
#ifndef CURRENCY_H
#define CURRENCY_H
class Currency {
public:
virtual void printStatement();
};
#endif
Dollar.cpp
#include <iostream>
using namespace std;
void printStatement() {
cout << "I am dollar";
}
Dollar.h
#ifndef DOLLAR_H
#ifndef DOLLAR_H
class Dollar : public Currency {
public:
void printStatement();
};
#endif
非常感谢你的时间,非常感谢任何帮助。
答案 0 :(得分:3)
该错误表示此类的名称预计位于: public
和{
之间:
class Dollar : public Currency { ^^^^^^^^
Currency
不是类的名称,因为您尚未定义此类。是的,您已在文件Currency.cpp
和Currency.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
,这不是一回事。