矢量数组的指针类型结构在CPP中

时间:2018-01-18 09:33:28

标签: c++ vector

我有一个结构:

struct node{

int data;
int rank;
node* ptr;
};

之后我按如下方式定义了一个类:结构在类之外。

class A{

     private:
     vector<node*> update(int searchKey);

     ....some more functions...

     const int maxLevel;
     };

现在当我写这个函数的定义时,我把它写成如下:

 std::vector<node*>A::update(int searchKey)
{
   vector<node*> result(maxLevel,0);   // 0 signifies a nullptr here

 .......some code that fills the vector declared above......

  return result;
}

maxLevel的值在类的构造函数中初始化,如下所示:

A::A():maxLevel(10)
{
  some more code...
}

运行代码会出现以下错误:

  

/ usr / include / c ++ / 5 / bits / stl_vector.h:1252:22:错误:从'int'无效转换为'std :: vector :: value_type {aka node *}'[-fpermissive]       _M_fill_initialize(static_cast(__ n),__ value);

我尝试了很多更改,但我一直收到错误消息。我做错了什么?如果我在问题中遗漏了一些细节,请告诉我。谢谢

2 个答案:

答案 0 :(得分:0)

使用

vector<node*> result(maxLevel, nullptr);

而不是解决该错误。自C ++ 11以来,我们不再使用0或NULL作为空指针。

通常最好不要用空指针初始化整个向量然后覆盖它们,而是首先保留空间然后再推送最终值。

result.reserve(maxLevel);
...
for (auto i = 0; i < maxLevel; ++i)
  result.push_back(/* pointer to new node */)

答案 1 :(得分:-1)

矢量结果(maxLevel,0); // 0表示此处的nullptr

您正尝试使用maxlevel和0来实例化vector。 maxlevel看起来像一个整数类型。 std :: vector中没有可以匹配此调用的构造函数。 这就是错误的原因。