我试图在网上关注this示例,该示例引导我使用以下代码:
EquipmentCollection.h(头文件)
#ifndef EQUIMENTCOLLECTION_H_
#define EQUIMENTCOLLECTION_H_
#include "Equipment.h"
#include <vector>
class EquipmentCollection : public Equipment {
public:
static void add( Equipment* );
static vector<Equipment*>& get();
~EquipmentCollection();
private:
static vector<Equipment*>* equipmentList;
};
#endif /* EQUIMENTCOLLECTION_H_ */
EquipmentCollection.cpp(源文件)
#include "EquipmentCollection.h"
void EquipmentCollection::add( Equipment* equipment ) {
if( equipmentList == NULL ) {
equipmentList = new vector<Equipment*>();
}
equipmentList->push_back( equipment );
}
vector<Equipment*>& EquipmentCollection::get() {
return *equipmentList;
}
EquipmentCollection::~EquipmentCollection() {
delete( equipmentList );
}
源文件上的错误为return *equipmentList;
,导致undefined reference to "EquipmentCollection::equipmentList"
错误。我不知道为什么它会给我这个错误。
答案 0 :(得分:4)
您尚未初始化静态成员。您应该在CPP文件中添加以下代码:
vector<Equipment*>* EquipmentCollection::equipmentList = nullptr;
此外,您的代码还有其他问题:
EquipmentCollection
的任何实例,因此永远不会调用析构函数,也不会释放设备。EquipmentCollection::get
,::add
会有undefined behavior,因为(8.3.2 / 4“引用”):注意:特别是,空引用不能存在于明确定义的中 程序,因为创建这样的引用的唯一方法是 将它绑定到通过解除引用空指针获得的“对象”, 这会导致未定义的行为。