一个静态结构数组,用于跟踪所有结构

时间:2015-06-09 21:18:44

标签: c++ arrays pointers struct static-variables

我必须创建一个结构,一个静态变量来跟踪有多少结构体,以及所有当前结构的列表。我在创建此列表和相应的构造函数时遇到了问题。到目前为止我已经

class MyStruct{
public:
    static int i;
    static MyStruct *AllStructs;
    MyStruct(){i++; (AllStructs++)=this;} //error happens here
};

int MyStruct::i=0;
MyStruct MyStruct::*AllStructs;

int main(){...}

正如你所看到的,我尝试通过创建一个静态数组来实现它,这个数组被添加到构造函数的一部分,但是编译器给了我一个错误:"左值作为赋值的左操作数"在我指出的地方。它不允许我将新结构分配给我的静态数组。

我做错了什么?请记住,指针是我生命中的祸根所以请向我解释,就像对一个小孩子一样。非常感谢。

1 个答案:

答案 0 :(得分:0)

当您定义MyStruct MyStruct::*AllStructs;时,您所做的只是为一个指向MyStruct对象的指针分配内存,而不是为它们的数组实际创建空间。您想要的这个数组需要初始化一个有效的内存位置才能存在,它可以存储您想要它的所有指针的副本。但是,这可能会变得混乱,因此您应该使用静态std::vector来管理MyStruct的内存分配。这很简单:

#include <vector>
#include <iostream>
class MyStruct{
public:
static std::vector<MyStruct*> AllStructs;
MyStruct(){AllStructs.push_back(this);}
};
std::vector<MyStruct*> MyStruct::AllStructs;


int main() {
    MyStruct ms;
    MyStruct ms2;
    std::cout << MyStruct::AllStructs.size() << std::endl;

}

希望有所帮助!