繁体   English   中英

指向结构的矢量的指针,包含指向矢量的指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM