一个静态结构数组来跟踪所有结构

a static struct array to keep track of all structs

我必须创建一个结构,一个静态变量来跟踪有多少结构处于活动状态以及所有当前结构的列表。我在创建此列表和适当的构造函数时遇到问题。到目前为止我有

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(){...}

如您所见,我试图通过创建一个静态数组来实现它,该数组作为构造函数的一部分添加到其中,但编译器在我指定的位置给出了一个错误:"lvalue required as left operand of assignment"。它不允许我将新结构分配给我的静态数组。

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

当您定义 MyStruct MyStruct::*AllStructs; 时,您所做的只是为指向 MyStruct 对象的单个指针分配内存,而不是实际为它们的数组创建 space。你想要的这个数组需要有一个有效的内存位置来初始化它,它可以存储你想要它的所有指针的副本。但这可能会变得混乱,因此您应该使用静态 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;

}

希望对您有所帮助!