2016-04-16 36 views
-2

我很新的C + +和书籍和YouTube和在这里同时工作,但我有一个奇怪的问题,我找不到解决方案。 我试图从一个基类“母亲”继承到一个派生类女儿,它不是为我工作,它说它需要继承在C++给予预期{上课

此代码取自TheNewBoston,所以谢谢你Bucky,只是给学分

C:\CppProjects\inheritance\Daughter.h|6|error: expected class-name before '{' token

我添加的主要和类:

主:

#include <iostream> 
#include "Mother.h" 
#include "Daughter.h" 
using namespace std; 

int main() 
{ 
    Daughter t; 
    t.sayName(); 
} 

妈妈级:

#include "Mother.h" 
#include <iostream> 
#include "Daughter.h" 
using namespace std; 
Mother::Mother() 
{ 
} 
void Mother::sayName(){ 
    cout<<"I am !!!"<<endl; 
} 

母亲头:

#ifndef MOTHER_H 
#define MOTHER_H 
class Mother 
{ 
    public: 
     Mother(); 
     void sayName(); 
}; 
#endif // MOTHER_H 

子类:

#include "Daughter.h" 
#include <iostream> 
#include "Mother.h" 
using namespace std; 
Daughter::Daughter() 
{ 
} 

女儿头:

#ifndef DAUGHTER_H 
#define DAUGHTER_H 
class Daughter : public Mother 
{ 
    public: 
     Daughter(); 
}; 
#endif // DAUGHTER_H 

我看了大部分的搜索在这里并没有什么发现,我甚至尝试过noob风格,并添加std ::,它无关wi它。

谢谢大家愿意尝试的人!

只是让你知道,当我试图把所有的代码都在一个文件中,它的伟大工程:

新的主:

#include <iostream> 
using namespace std; 

class Mother 
{ 
public: 
    Mother(); 
    void sayName(){ 
     cout<<"I am!!!!"<<endl; 
    } 
}; 

class Daughter: public Mother 
{ 
public: 
    Daughter(); 
}; 

int main() 
{ 
    Daughter t; 
    t.sayName(); 
} 
+4

至少当包括女儿的头部时,它不知道什么叫母亲 –

+0

类可以请你进一步解释?并解决它的方法? – shimon

+3

想一下定义的作用。当编译器启动你的Daughter.cpp时,它看到了什么?它看到一个链接到Daughter.h。有一堂课说“我是从母亲那里继承的”,但是你没有告诉编译器母亲是什么。所以你必须首先有一个包含母体的定义。订单很重要。 –

回答

2

声明的顺序很重要。目前,在您的Daughter课程中,您包含Daughter的标题,并且之后只有Mother。这意味着编译器会看到一个定义“嗨,我是女儿,我继承了母亲”,并会停下来想知道“我从未见过你的母亲,我不知道该怎么做。”

包含和定义的顺序很重要。总是先要有基类。

通常你要么在女儿头中包含基头,要么至少有一个forward declaration来说明Mother类确实存在。请检查header guards,因为您需要它们。