如何在 C++ 中 class 的构造函数中将对象推送到静态向量

How to push objects to a static vector while in the contructor of a class in C++

我需要在创建一些城市的名称后立即将它们放入向量中...为了实现这一点,我为 class [=14] 创建了一个静态 vector =],但是当我尝试编译代码时出现错误

error: lvalue required as unary '&' operand
          this->cities.push_back(&this);
                                   ^~~~

我做错了什么?

我的代码如下...

#include <iostream>
#include <ctime>
#include <vector>

using namespace std;

class City
{
private:
     string name;
     static vector<City *> cities;

public:
     string getName() { return name; }
     City(string name) : name{name}
     {
          this->cities.push_back(&this);
     };
     ~City(){};
} hongKong{"Hong Kong"}, bangkok{"Bangkok"}, macau{"Macau"}, singapura{"Singapura"}, londres{"Londres"}, paris{"Paris"}, dubai{"Dubai"}, delhi{"Delhi"}, istambul{"Istambul"}, kuala{"Kuala"}, lumpur{"Lumpur"}, novaIorque{"Nova Iorque"}, antalya{"Antalya"}, mumbai{"Mumbai"}, shenzen{"Shenzen"}, phuket{"Phuket"};

int main()
{
}

this 已经是一个 City* 指针,所以从 &this.

中删除 &

此外,不要忘记实际 定义 静态 vector 对象。

此外,您应该考虑 class' copy/move 构造函数和析构函数,以确保您不会错过添加指针或留下悬空指针。

试试这个:

#include <iostream>
#include <ctime>
#include <vector>

using namespace std;

class City
{
private:
     string name;
     static vector<City *> cities;

public:
     string getName() { return name; }

     City(string name) : name{name}
     {
          cities.push_back(this);
     }

     City(const City &src) : name{src.name}
     {
          cities.push_back(this);
     }

     City(City &&src) : name{std::move(src.name)}
     {
          cities.push_back(this);
     }

     ~City()
     {
          cities.erase(std::find(cities.begin(), cities.end(), this));
     }
};

vector<City *> City::cities;

City hongKong{"Hong Kong"}, bangkok{"Bangkok"}, macau{"Macau"}, singapura{"Singapura"}, londres{"Londres"}, paris{"Paris"}, dubai{"Dubai"}, delhi{"Delhi"}, istambul{"Istambul"}, kuala{"Kuala"}, lumpur{"Lumpur"}, novaIorque{"Nova Iorque"}, antalya{"Antalya"}, mumbai{"Mumbai"}, shenzen{"Shenzen"}, phuket{"Phuket"};

int main()
{
}