[英]Pointer to vector of structs containing pointer to vector
private:
struct info{
int size = 0;
int key = 0;
int capacity = 1;
std::vector<int*> *value = new std::vector<int*>(capacity);
};
int keyCapacity_;
int size_;
std::vector<info*> *keys_;
在功能内...
//some code
keys_ = new std::vector<info*>(keyCapacity_);
//some code
(*keys_)[size_] = new info;
(*keys_)[size_]->(*value)[size] = inputValue; //getting error on this line
(*keys_)[size_]->size += 1;
(*keys_)[size_]->key = key;
我有一个指向结构信息向量的指针。 然后在信息中,有一个指向将保存值的向量的指针。 可能会输入非常大量的数据,并且如果需要,程序会调整向量的大小。 当前输入值被添加到向量的第一个空白点size_。 在上面我确定的那一行上,我遇到了一个错误:
a3.hpp:67:20: error: expected unqualified-id before ‘(’ token
(*keys_)[size_]->(*value)[size] = value;
^
a3.hpp:67:22: error: invalid type argument of unary ‘*’ (have ‘int’)
(*keys_)[size_]->(*value)[size] = value;
如何访问此向量以更改值?
好吧,在这种情况下, *value
不在范围内。 它在括号中,因此将单独进行评估。 要获得价值,您需要:
(*keys_)[size_]->value
然后您要取消引用:
*((*keys_)[size_]->value)
多余的括号可能不是必需的,但这可以使事情变得清楚。 然后,您要为该索引:
(*((*keys_)[size_]->value))[size]
我假设size_
和size
是正确的,不同的索引。 命名时要小心。 这种相似性很容易使您绊倒。
附带说明一下,一定要意识到在现代C ++中几乎永远不会使用new
。 您可能想使用智能指针。
(*keys_)[size_]
这是对的
(*keys_)[size_]->(*value)[size]
但这不是。 看起来您正在调用(* value)[size],这没有任何意义。 它是语法错误。
因此您必须先调用该值,然后再将其整体取消引用。 像这样(*keys_)
int size = yourSize;
(*((*keys_)[size_]->value))
之后,您现在可以访问其索引和其中的对象。
(*((*keys_)[size_]->value))[size] = &value;
您的行的快速解决方法是: (*((*keys_)[size_]->value))[size] = inputValue;
但是,认真的说,不要使用C风格的指针。 将您的代码更改为此:
private:
struct info {
int size = 0;
int key = 0;
int capacity = 1;
std::vector<int> value;
}
int keyCapacity_;
int size_;
std::vector<std::unique_ptr<info>> keys_;
在该函数中:
//some code
keys_.resize(keyCapacity_);
//some code
keys_[size_] = std::make_unique<info>();
keys_[size_]->value[size] = inputValue;
keys_[size_]->size += 1;
keys_[size_]->key = key;
由于您没有给出完整的示例,所以我不能完全确定,但是代码对我来说仍然是错误的,因为您似乎试图写入大小为0的向量。 ,但要加一点盐:
//some code
keys_.resize(keyCapacity_);
//some code
keys_[size_] = std::make_unique<info>();
keys_[size_]->value.push_back(inputValue);
keys_[size_]->size += 1;
keys_[size_]->key = key;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.