繁体   English   中英

返回类的私有静态成员

[英]Return private static member of a class

我试图在网上关注这个例子,它引导我使用以下代码:

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"错误的undefined reference to "EquipmentCollection::equipmentList" 我不知道为什么它会给我这个错误。

您尚未初始化静态成员。 您应该在CPP文件中添加以下代码:

vector<Equipment*>* EquipmentCollection::equipmentList = nullptr;

您的代码还有其他问题:

  • 您不创建任何EquipmentCollection实例,因此永远不会调用析构函数,也永远不会释放设备。
  • 如果之前没有调用::add ,那么EquipmentCollection::get会有一个未定义的行为 ,因为(8.3.2 / 4“References”):

注意:特别是,在一个定义良好的程序中不能存在空引用,因为创建这样一个引用的唯一方法是将它绑定到通过解除引用空指针获得的“对象”,这会导致未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM