没有标头的"{"标记之前的预期类名

expected class-name before '{' token with no headers

本文关键字:      更新时间:2023-10-16

我对手头的错误找到的答案感到相当困惑。

我有一个类,我想继承。但当我尝试继承时,我得到了上述错误。这些类都不使用头文件,因为我这样做只是为了了解虚拟覆盖是如何工作的。我对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

中包含Musicain的定义。

现在,当您这样做时,您可能会发现编译器将这些文件中的每个文件传递了不止一次,这打破了单一定义规则。为了克服这个问题,您需要向每个包含的文件添加include-guard。尝试将#pragma once作为第一行添加到每个头文件中。(注意#pragma once不是跨平台的,但大多数实现都支持它,所以在你对语言更熟悉一点之前,你应该没问题)。

简言之,

  1. 重命名音乐家.cpp ->音乐家.hpp(同样为钢琴家)。这些是头文件(包含在main.cpp中)
  2. 添加#include "Musician.hpp"到钢琴家.hpp(这样音乐家类可以找到音乐家类的定义(和实现)。
  3. 添加#pragma once到所有.hpp文件的顶部
相关文章:
  • 没有找到相关文章