亲爱的,我有两个类,分别是计算机和软盘。
当我把
#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;
}
请帮忙。
感谢。
答案 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,则会创建一个涉及三个文件的循环依赖项。在这种情况下,您会收到未定义的类型编译器错误。