在没有标题的'{'标记之前的预期类名

时间:2011-07-25 18:15:08

标签: c++ class token

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

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

1 个答案:

答案 0 :(得分:0)

您的class Pianist似乎继承了文件Muscician中的Pianist.cpp(应重命名为Pianist.hpp),但该文件不包含Musician.cpp(应该重命名为Musician.hpp),因此不知道Muscician是什么。 你想把Musicain的定义包含在Pianist.hpp

现在,当你这样做时,你可能会发现编译器已经多次传递了这些文件,破坏了一个定义规则。要解决此问题,您需要为每个包含的文件添加包含防护。尝试将#pragma once添加为每个头文件的第一行。 (注意#pragma曾经不是跨平台的,但大多数实现都支持它,所以你应该没问题,直到你对这种语言更熟悉。)

简而言之,

  1. 重命名Musician.cpp - &gt; Musician.hpp(同样适用于钢琴家)。这些是头文件(您将它们包含在main.cpp中)
  2. #include "Musician.hpp"添加到Pianist.hpp(因此音乐家类可以找到音乐家类的定义(和实现)。
  3. #pragma once添加到所有.hpp文件的顶部。
  4. 然后在完成此操作后给出任何编译器错误。