C++未定义类型错误

问题描述:

亲爱的,我有两个类是电脑和软盘。C++未定义类型错误

当我把

#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 2010-07-15 10:57:34

+1

我们能否看到头文件?这可能是问题所在。 – 2010-07-15 10:59:15

是否使用了相同的标题包括在每个文件中后卫,例如:

#ifndef MY_INCLUDE_GUARD 
#define MY_INCLUDE_GUARD 

// blah blah 

#endif 

MY_INCLUDE_GUARD需要在每头一个唯一的名称。

+0

谢谢解决它。 多么愚蠢的错误。 – peterwkc 2010-07-16 06:39:08

您是否在头文件中使用了include guards?如果是这样,请提供更多信息。

我有检查有头文件

可能没有文件之间的直接循环依赖之间没有循环 依赖。但是,如果其中一个EquipmentAttributes.h或EquipmentVisitor.h包含computer.h或floppy.h,则会创建一个涉及三个文件的循环依存关系。在这种情况下,你会得到未定义类型的编译器错误。

+0

谢谢。问题解决了。 – peterwkc 2010-07-16 06:39:36