【问题标题】:Pointer to vector of structs containing pointer to vector指向包含指向向量的指针的结构向量的指针
【发布时间】:2018-08-28 18:16:17
【问题描述】:
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;

我有一个指向结构信息向量的指针。然后在 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;

如何访问该向量来更改值?

【问题讨论】:

    标签: c++ pointers vector struct


    【解决方案1】:

    好吧,*value 不在此上下文中。它在括号中,因此将单独评估。要获得价值,您需要:

    (*keys_)[size_]->value
    

    然后你想取消引用:

     *((*keys_)[size_]->value)
    

    额外的一组括号可能不是必需的,但它使事情变得清晰。然后你想索引它:

    (*((*keys_)[size_]->value))[size]
    

    我假设size_size 是正确的,不同的索引。小心你的命名。这种相似性很容易让你绊倒。

    作为旁注,请意识到使用new 几乎从来都不是您想要在现代 C++ 中执行的操作。您可能想改用智能指针。

    【讨论】:

      【解决方案2】:

      (*keys_)[size_] 这个是对的

      (*keys_)[size_]-&gt;(*value)[size] 但这不是。看起来您正在调用 (*value)[size] ,这没有任何意义。这是一个语法错误。

      因此您必须先调用该值,然后将其作为一个整体取消引用。像这样(*keys_)

      int size = yourSize;
      (*((*keys_)[size_]->value))
      

      之后,您现在可以访问其中的索引和对象。

      (*((*keys_)[size_]-&gt;value))[size] = &amp;value;

      【讨论】:

        【解决方案3】:

        您的线路的快速修复是这样的:(*((*keys_)[size_]-&gt;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;
        

        【讨论】:

          猜你喜欢
          • 2011-08-04
          • 2012-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多