没有标头的"{"标记之前的预期类名
expected class-name before '{' token with no headers
我对手头的错误找到的答案感到相当困惑。
我有一个类,我想继承。但当我尝试继承时,我得到了上述错误。这些类都不使用头文件,因为我这样做只是为了了解虚拟覆盖是如何工作的。我对c++还是个新手。所以,这并不是要真正做出什么东西,而是要更好地理解c++。
当我在谷歌上寻找答案时,它通常以头文件和"#include"关键字的问题告终。
也没有太多的代码可以使用。有什么建议吗?
编辑:就像我说的没有太多的代码来工作,我没有包括的其他文件也没有什么不同的钢琴家
/*
* File: main.cpp
* Author: Sidar
*
* Created on 19 juli 2011, 17:51
*/
#include <cstdlib>
#include <iostream>
#include "Musician.cpp"
#include "Pianist.cpp"
#include "MasterPianist.cpp"
#include "JuniorPianist.cpp"
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
Musician *m = new Musician();
Pianist *p = new Pianist();
//JuniorPianist *jp = new JuniorPianist();
MasterPianist *mp = new MasterPianist();
//__________________________
cout << "Pianist greets:n";
m->greet();
cout << "And this is a:n";
m = p;
m->greet();
cout << "The pianist states his proffesion:n";
m = mp;
m->greet();
cout << "And this is his student:n";
// m = jp;
m->greet();
return 0;
}
要继承的类
#include <iostream>
using namespace std;
class Musician{
public:
//Constructors
Musician(){}
Musician(const Musician& m){}
~Musician(){}
//Methods/Functions
virtual void greet(){
cout << "Hello";
}
};
尝试继承的类。
/*
* File: Pianonist.cpp
* Author: Sidar
*
* Created on 19 juli 2011, 17:58
*/
#include <iostream>
using namespace std;
class Pianist: public Musician {
public:
Pianist(){}
Pianist(const Pianist& orig){}
~Pianist() {}
//____________________________________
void greet(){
cout << " This is pianist";
}
};
似乎您的class Pianist
继承自Muscician
中的文件Pianist.cpp
(应重命名为Pianist.hpp
),但该文件不包括Musician.cpp
(应重命名为Musician.hpp
),因此不知道Muscician
是什么。您想要在piano .hpp
现在,当您这样做时,您可能会发现编译器将这些文件中的每个文件传递了不止一次,这打破了单一定义规则。为了克服这个问题,您需要向每个包含的文件添加include-guard。尝试将#pragma once
作为第一行添加到每个头文件中。(注意#pragma once不是跨平台的,但大多数实现都支持它,所以在你对语言更熟悉一点之前,你应该没问题)。
- 重命名音乐家.cpp ->音乐家.hpp(同样为钢琴家)。这些是头文件(包含在main.cpp中)
- 添加
#include "Musician.hpp"
到钢琴家.hpp(这样音乐家类可以找到音乐家类的定义(和实现)。 - 添加
#pragma once
到所有.hpp
文件的顶部
相关文章:
- 没有找到相关文章