簡體   English   中英

用於跟蹤所有結構的靜態結構數組

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

正如您所看到的,我嘗試通過創建一個靜態數組來實現它,該數組作為構造函數的一部分添加到其中,但是編譯器在我指示的位置給了我一個錯誤:“左值需要作為賦值的左操作數”。 它不允許我將新結構分配給我的靜態數組。

我究竟做錯了什么? 請記住,指針是我生活的禍根,所以請像對小孩一樣向我解釋。 非常感謝。

當你定義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;

}

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM