【问题标题】:initialising vector of pointers for a user defined class初始化用户定义类的指针向量
【发布时间】:2020-04-12 18:45:59
【问题描述】:

我试图初始化一个指针向量,但出现了一些错误,代码和错误都在下面

class tr
{
public:
    int n = 26;
    vector<tr* >  a(n  ,NULL);

};

我得到的错误是:

try_class.cpp:7:25: error: ‘n’ is not a type
        vector<tr* >  a(n  ,NULL);
                        ^
try_class.cpp:7:29: error: expected identifier before ‘__null’
        vector<tr* >  a(n  ,NULL);
                            ^~~~
try_class.cpp:7:29: error: expected ‘,’ or ‘...’ before ‘__null’

我无法弄清楚我的代码有什么问题

【问题讨论】:

  • 在类中初始化内联成员时不能使用括号,因为这将用于声明函数。使用“赋值”语法(就像使用 n 一样)或使用花括号 {}(这在使用 std::vector 的情况下是不可能的)。或者作为替代方案,创建一个构造函数并在构造函数成员初始化列表中初始化向量。
  • 在一个稍微相关的说明中,推荐的“空指针”是nullptr 或普通的0。而对于指针,这是默认值,因此在初始化向量时根本不需要指定它,只需指定大小即可。
  • 一个类,它自身包含一个容器,该容器带有指向它自己的指针... ...听起来像一棵树。在我看来,在这种情况下,您似乎可以使用 std::array 而不是 std::vector
  • 实际上想要达到什么目的?也许一开始就使用向量是错误的。
  • n 不仅用作向量的大小吗?你真的需要它作为一个单独的成员变量吗?也许应该是static?也许应该是constconstexpr

标签: c++ class pointers vector


【解决方案1】:

不允许父母进行成员初始化(以避免最棘手的解析问题)。

你可以这样做:

class tr
{
public:
    int n = 26;
    std::vector<tr*>  a{std::size_t(n), nullptr};
};

class tr
{
public:
    int n = 26;
    std::vector<tr*> a = std::vector<tr*>(n, nullptr);
};

【讨论】:

  • {std::size_t(n), nullptr} 不匹配 initializer_list&lt;tr*&gt;,所以我们很好。 std::vector&lt;std::size_t&gt; 不过会有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多