我必须创建一个结构,一个静态变量来跟踪有多少结构体,以及所有当前结构的列表。我在创建此列表和相应的构造函数时遇到了问题。到目前为止我已经
了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(){...}
正如你所看到的,我尝试通过创建一个静态数组来实现它,这个数组被添加到构造函数的一部分,但是编译器给了我一个错误:"左值作为赋值的左操作数"在我指出的地方。它不允许我将新结构分配给我的静态数组。
我做错了什么?请记住,指针是我生命中的祸根所以请向我解释,就像对一个小孩子一样。非常感谢。
答案 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;
}
希望有所帮助!