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;
我有一个指向struct info向量的指针。然后在info中有一个指向将保存值的向量的指针。可以输入非常大量的数据,并且如果需要,程序调整矢量的大小。当前输入值被添加到向量上的第一个开放点,即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;
如何访问此向量以更改值?
答案 0 :(得分:2)
嗯,*value
不在此范围内。它在括号中,因此将单独评估。要获得价值,您需要:
(*keys_)[size_]->value
然后你想要取消引用:
*((*keys_)[size_]->value)
可能没有必要使用额外的套装,但事情很清楚。然后你想索引:
(*((*keys_)[size_]->value))[size]
我假设size_
和size
是正确的,不同的索引。小心你的命名。这种相似性很容易让你失望。
作为旁注,请注意使用new
几乎绝不是您在现代C ++中想要做的事情。你可能想要使用智能指针。
答案 1 :(得分:1)
(*keys_)[size_]
这个是对的
(*keys_)[size_]->(*value)[size]
但这个不是。它看起来像你正在调用(*值)[大小],这没有任何意义。这是一个语法错误。
因此您必须先调用该值,然后将其作为一个整体取消引用。像这样(*keys_)
int size = yourSize;
(*((*keys_)[size_]->value))
之后,您现在可以访问其中的索引和对象。
(*((*keys_)[size_]->value))[size] = &value;
答案 2 :(得分:0)
您的热线的快速解决方法是:(*((*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;