2010-07-15 3 views
2

친애하는 모든 컴퓨터와 플로피 디스크 두 클래스가 있습니다. 난 주에C++ Undefined Type Error

#include "FloppyDisk.h" 
#include "Computer.h" 

넣으면

후 컴파일러 나 주에

#include "Computer.h" 
#include "FloppyDisk.h" 

, 그때 컴파일러 미표시 플로피 디스크 오류를 생성

미표시 시스템의 에러를 생성한다.

무엇이 문제입니까? 헤더 파일 사이에 순환 종속성이 없는지 확인했습니다.

다음은 참조 용 구현 파일입니다.

#include "EquipmentAttributes.h" 
#include "EquipmentVisitor.h" 
#include "Computer.h" 

#include "BoostHeader.h" 

#include <algorithm> 

// ============================================= 
computer::computer() 
: cont() 
{ 
} 
// ============================================= 
void computer::add(equipment* equip) 
{ 
cont.push_back(equip); 
} 
// ============================================= 
void computer::remove(equipment* equip) 
{ 
vecIte myIte; 

myIte = std::find(cont.begin(), cont.end(), equip); 
cont.erase(myIte); 
} 
// ============================================= 
void computer::accept(equipmentVisitor* visitor) 
{ 
BOOST_FOREACH(equipment* anEquip, cont) 
{ 
    anEquip->accept(visitor); 
} 

visitor->visitComputer(this); 
} 
// ============================================= 
computer::equipVec computer::getCont() const 
{ 
return cont; 
} 


#include "FloppyDisk.h" 
#include "EquipmentAttributes.h" 
#include "EquipmentVisitor.h" 

// ============================================= 
floppyDisk::floppyDisk(const int userPrice, const std::string& userName) 
: state(new equipmentState(userPrice, userName)) 
{ 
} 
// ============================================= 
void floppyDisk::accept(equipmentVisitor* visitor) 
{ 
visitor->visitFloppyDisk(this); 
} 
// ============================================= 
floppyDisk::equipPtr floppyDisk::getState() const 
{ 
return state; 
} 

도와주세요.

감사합니다.

+0

컴파일러 출력도 게시 할 수 있습니까? – Nubsis

+1

헤더 파일을 볼 수 있습니까? 아마 문제가있는 곳일 겁니다. –

답변

4

같은 헤더를 사용하고 각 헤더에 고유 한 이름으로

#ifndef MY_INCLUDE_GUARD 
#define MY_INCLUDE_GUARD 

// blah blah 

#endif 

MY_INCLUDE_GUARD 필요 각 파일에 가드, 예컨대을 : 포함한다.

+0

감사합니다. 어리석은 실수. – peterwkc

2

헤더 파일에 include guards을 사용하셨습니까? 그렇다면 자세한 정보를 제공해주십시오.

1

내가 헤더 파일

파일 간의 직접 순환 의존성이되지 않을 수 있습니다 사이에 순환 의존성이없는 확인해야합니다. 그러나 EquipmentAttributes.h 또는 EquipmentVisitor.h 중 하나에 computer.h 또는 floppy.h가 포함되어 있으면 세 개의 파일과 관련된 순환 종속을 작성합니다. 이 경우 정의되지 않은 형식의 컴파일러 오류가 발생합니다.

+0

감사. 문제 해결됨. – peterwkc