2016-04-16 30 views
-2

私はC++には新しく、書籍とYouTubeで同時に作業していますが、解決策が見つからないという奇妙な問題があります。 私は基底クラス "母"から派生クラスの娘に継承しようとしていますが、それは私のために働いていません。C++で継承すると、{クラスの前に期待される{

このコードはTheNewBostonから取ってきました。私は、メインとクラスを追加しているクレジット

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 

私はここで検索のほとんどに見て、何も見つからなかった、I 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

少なくとも、娘のヘッダーを含めると、Mother –

+0

というクラスのものは何も分かっていませんか?それを修正する方法は? – shimon

+3

定義が何をするか考えてみてください。 Daughter.cppでコンパイラが起動すると、何が表示されますか? Daughter.hへのリンクがあります。 「私は母から受け継いだ」というクラスがありますが、あなたは母が何であるかをコンパイラに知らせていません。だからあなたは最初に母の定義のためのインクルードを持っていなければなりません。順序は重要です。 –

答えて

2

新しいメイン:ちょうど私は1つのファイルにすべてのコードを入れしようとしているとき、それは素晴らしい作品、あなたが知っているので

Daughterクラスの現時点では、Daughterのヘッダーとそれ以降はMotherのヘッダーが含まれます。つまり、コンパイラは「こんにちは、私は娘、私は母親を継承しました」という定義を見て、「私はあなたの母親に会ったことは一度もありません。

包含と定義の順序は重要です。基本クラスは常に最初に作成してください。

通常、Motherヘッダーにベースヘッダーを含めるか、Motherクラスが存在することを通知するために少なくともforward declarationが含まれています。また、必要な場合はheader guardsを確認してください。

関連する問題