Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;静态特性_C++_Static_Properties - Fatal编程技术网

C++ C++;静态特性

C++ C++;静态特性,c++,static,properties,C++,Static,Properties,我在访问类中的静态属性时遇到问题。我得到以下错误: shape.obj:错误LNK2001:未解析的外部符号“public:static class TCollection shape::shapes” 该类的定义为: class Shape { public: static Collection<Shape*> shapes; static void get_all_instances(Collection<Shape*> &list); }

我在访问类中的静态属性时遇到问题。我得到以下错误:

shape.obj:错误LNK2001:未解析的外部符号“public:static class TCollection shape::shapes”

该类的定义为:

class Shape {

public:
    static Collection<Shape*> shapes;

    static void get_all_instances(Collection<Shape*> &list);
};
类形状{
公众:
静态集合形状;
静态void获取所有实例(集合和列表);
};
静态方法的实现是:

void Shape::get_all_instances(Collection<Shape*> &list) {
    list = Shape::shapes;
}
void Shape::获取所有实例(集合和列表){
列表=形状::形状;
}
似乎未初始化
shapes
属性。

是。您需要添加

Collection<Shape*> Shape::shapes;
集合形状::形状;

在一个.cpp文件中定义静态成员。

声明位于类中

定义必须放在一个cpp文件中:

Collection<Shape*> Shape::shapes;
集合形状::形状;

您已经声明了
形状
,但尚未定义它

将定义添加到实现文件中

Collection<Shape*> Shape::shapes; //definition
Collection<Shape*> Shape::shapes( whatever constructor args );
集合形状::形状//定义

您是对的,因为静态变量只在类中声明,而没有定义

您也必须定义它们,只需将下面的行添加到您的实现所在的文件中

Collection<Shape*> Shape::shapes;
集合形状::形状;

它应该可以做到这一点。

对于代码原样,您需要提供
形状的定义,如(在实现文件中)

集合形状::形状(无论构造函数参数是什么);

但您可能需要考虑一个成员函数,该函数返回对本地静态<代码>集合< /代码>的引用。


干杯&hth.

哇,感谢您的快速反馈。花了几个小时研究StackOverflow,花了大约1分钟。我想你会非常后悔既有一个静态变量又有一个公共变量。你真的需要吗?为什么不在需要所有形状列表的地方传递一个const集合&对象呢?这将鼓励其他开发人员在需要列表时调用Shape::get_all_instances(),而不是显式地传递它。这将导致各种各样的问题,当你想要测试或者想要操作形状的子列表时。是的,现在它是公开的,因为狂热的调试。那个狂热的调试人很少是一个好的设计顾问<代码>:)
幸好这是作业:)