【问题标题】:C++: Dereferencing a vector<vector<class_ptr*>>C++:取消引用向量<vector<class_ptr*>>
【发布时间】:2015-04-16 19:55:45
【问题描述】:

我正在尝试将类存储在 2d 数组中,但带有空字段或孔,即根本没有内容的字段。由于类本身很大,我决定用指向类的指针填充向量,因此空字段可以简单地写为 NULL。 我立刻撞到了墙上。 如果我尝试像这样初始化向量的第一个值:

myVector[0][0]* = classToBeCopied;

我收到以下错误: “语法错误” "'=' 标记之前的预期主表达式"

我确实有一个适用于该类的副本构造函数和 operator=。 (我正在使用 Eclipse Luna) 提前谢谢!

【问题讨论】:

  • 那是什么*?你的意思是myVector[0][0] = &amp;classToBeCopied;?
  • 如果您只想存储副本,为什么不将其声明为std::vector&lt;std::vector&lt;class_type&gt;&gt; 以使副本成为默认值?存储指针似乎适得其反。
  • @Antonio 我认为 OP 正在尝试取消引用存储在嵌套 vector 中的指针以触发复制赋值运算符。
  • @Antonio ^James Adkins 是正确的。由于各种原因,使用引用可能会变得混乱。
  • @BigBadWolf 放在那里,&amp; 不是参考,而是“地址”。你可以找到一个很好的解释here

标签: c++ vector


【解决方案1】:

试试:

*myVector[0][0] = classToBeCopied;

【讨论】:

  • 谢谢!那行得通。星号位置在 C++ 中是否有所不同?我刚从 C.
  • a* = b;将尝试解析为 a *= b;在 C 中也是如此,因此在取消引用语法方面没有区别
  • 我猜你可以连续做一千次,但仍然会出错。我觉得空格清楚地表明它不是 *=。
  • @BigBadWolf 我想知道这个解决方案如何为您工作。您说您尝试初始化向量的第一个值,并将指针存储在vector 中,所以我假设它们是用0 初始化的。在这种情况下,*myVector[0][0] 表示取消引用空指针,这会导致分段错误...
  • 天哪,我还没考虑过。 [0][0] 实例是由 push_back(class*) 创建的,这可以解释为什么我没有收到段错误。我想我迟早要使用new。
【解决方案2】:

myVector[0][0]* = classToBeCopied;

如果myVector[0][0] 的结果是类型class_ptr*。然后您可以执行以下操作。

class_ptr* p = myVector[0][0];
*p; // Dereference

因此以下内容就足够了

*myVector[0][0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    相关资源
    最近更新 更多