我有一个结构:
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);
我尝试了很多更改,但我一直收到错误消息。我做错了什么?如果我在问题中遗漏了一些细节,请告诉我。谢谢
答案 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中没有可以匹配此调用的构造函数。 这就是错误的原因。