C ++未定义类型错误

时间:2010-07-15 10:04:19

标签: c++

亲爱的,我有两个类,分别是计算机和软盘。

当我把

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

在main中,然后编译器生成计算机未声明的错误

当我

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

在main中,然后编译器生成未声明的软盘错误。

有什么问题? 我检查了头文件之间没有循环依赖关系。

这些是供参考的实施文件。

#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;
}

请帮忙。

感谢。

3 个答案:

答案 0 :(得分:4)

您是否在每个文件中使用相同的标头包含保护,例如:

#ifndef MY_INCLUDE_GUARD
#define MY_INCLUDE_GUARD

// blah blah

#endif

MY_INCLUDE_GUARD必须是每个标头中的唯一名称。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

  

我检查没有循环   头文件之间的依赖关系

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