2017-11-11 7 views
-2

私は現在、私の開始プロジェクトでヘッダーファイルを含むことで多くの不満を抱いています。これまでのところ、私はベースファイルにリンクされたヘッダファイルを持っており、コンパイルで私のベースクラスを読み取ることができないという同じエラーが発生しています。C++ヘッダーファイルエラー:基本クラス定義されていません

私はヘッダファイルの読み込みに問題があると考えています。私は何をすべきか?

//今、それはビルド

メインのCPPファイル

#include <string> 
#include "animal.h" 
using namespace std; 
enum COLOR { Green, Blue, White, Black, Brown }; 

int main() { 

cout << "Starting" << endl; 
int value = 0; Mammal *zoo[3]; 
int i = 0; 

cout << "Program exiting …. " << endl; 
return 0; 
} 

ヘッダファイルでコンパイルエラーを示しているアップデート

#include <iostream> 
#include <string> 
#ifndef HEADER_H 
#define HEADER_H 

using namespace std; 
enum COLOR { Green, Blue, White, Black, Brown }; 

class Animal { 
public: 
Animal() { 
    cout << "constructing Animal object " << _name << endl; 
} 
~Animal() { 
    cout << "destructing Animal object " << _name << endl; 
} 

Animal(std::string n, COLOR c) { 
    _name = n; _color = c; 
    cout << "constructing " << _name << " Color " << 
     endl; 
} 

virtual void speak() const { cout << "Animal speaks " << endl; } 
//void speak() const { cout << "Animal speaks " << endl; } 
virtual void move() = 0; 

void setName(std::string n) { _name = n; } 
void setCOLOR(COLOR c) { _color = c; } 

private: 
std::string _name; COLOR _color; 
}; 

class Mammal : public Animal { 
public: 
Mammal() {} 
Mammal(std::string n, COLOR c) { 
    setName(n); 
    setCOLOR(c); 
    cout << "constructing Mammal object " << endl; 
} 
~Mammal() { cout << "destructing Mammal object " << endl; } 
}; 

#endif 
+0

使用する前に 'COLOR'を' animal.h'で宣言するべきではありませんか? – user0042

+0

'COLOR'はcppファイルで定義されており、ヘッダーには表示されません。ヘッダーファイルの' std'名前空間の 'cout'やその他のものを、' :: std :: 'を正しく前に付けずに使用しています。 – VTT

答えて

0

一緒に警備員をされpragma onceを使用して含ま冗長です。いずれか1つを削除します。

ヘッダーにstringを使用する場合は、接頭辞がstd::であることを忘れないでください。

COLORは、ヘッダーファイルに移動する必要があります。あなたはまた、結論としてsetName

を定義する必要が

// #pragma once 
#ifndef HEADER_H 
#define HEADER_H 

using namespace std; 
enum COLOR { Green, Blue, White, Black, Brown }; 

:CおよびC++で

を、すべてのタイプまたは関数がその逆を使用していない、最初に宣言または定義する必要があります。

+0

'pragma once'を使用すると冗長ではなく、ヘッダーガードを一緒に使用すると、それらのうちの1つのみを使用するのとは異なる効果が得られます。 – VTT

+0

@VTT、あなたは典型的な実用性について話していますか? – Arash

+0

@ArashMohammadi _ "ヘッダーファイルで' namespace std'を使うことを忘れないでください... "_私が考えることができる最悪のアドバイス。 – user0042

関連する問題