2017-11-11 4 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' 네임 스페이스의'std' 네임 스페이스에있는 다른 것들을 사용하고 있습니다. – VTT

답변

0

함께 가드입니다 pragma once를 사용하여 포함 많은. 둘 중 하나를 제거하십시오.

헤더에 string을 사용하는 경우 접두어가 std:: 인 것을 잊지 마십시오.

COLOR은 헤더 파일로 이동해야합니다. C 및 C++에서

, 모든 유형 또는 함수 선언 또는 첫번째 정의 다음 사용하지되어야 반대 :

// #pragma once 
#ifndef HEADER_H 
#define HEADER_H 

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

는 또한 결론적으로 setName

정의 할 필요가있다.

+0

'pragma once'를 사용하면 중복되지 않으며 헤더 가드는 그 중 하나만 사용하는 것과는 다른 효과를 낼 수 있습니다. – VTT

+0

@VTT, 전형적인 실용적인 사용에 대해 이야기하고 있습니까? – Arash

+0

@ArashMohammadi _ "헤더 파일에서 namespace std를 사용하는 것을 잊지 마십시오 ..."_ 내가 생각할 수있는 최악의 조언. – user0042