【问题标题】:Adding a Newly Created Object to a Vector将新创建的对象添加到向量
【发布时间】:2012-07-09 10:17:28
【问题描述】:

我最近声明在程序中使用指针,当我尝试以下操作时,出现此错误。

stored_points.push_back(new Point(anchor_y,anchor_x,last_direction));   

错误 C2664: 'void std::vector<_ty>::push_back(_Ty &&)' : 无法使用 [ 将参数 1 从 'Point *' 转换为 'Point &&' _Ty=点 ] 原因:无法从“Point *”转换为“Point” 没有构造函数可以采用源类型,或者构造函数重载决议不明确

我知道使用 new 会返回一个指针,而 .push_back 不能接受这一点,但是,我不知道如何解决这个问题。

【问题讨论】:

    标签: object pointers vector


    【解决方案1】:

    你是如何定义你的向量的? 如果是vector&lt;Point&gt;,请尝试将其更改为vector&lt;Point*&gt;。这告诉向量存储指向对象的指针。

    【讨论】:

    • 这样做时,会出现大量其他错误,我还需要做些什么来解决这个问题吗?
    • 对于同一行,我收到相同的错误,并且此行 "if(*stored_points.at(index).x==index_x_p&&*stored_points.at(index).y== index_y_p){" 我收到"错误 C2228: '.x' 的左边必须有类/结构/联合 1> 类型是 'Point *' 1> 你打算改用 '->' 吗?"我的下一个回复将在十一个多小时后,抱歉提前延迟。
    • 看起来您正试图在index 处取消引用指向Point 的指针,但编译器将其解释为对stored_points 的取消引用。像*(stored_points.at(index)).x(y)这样的括号应该可以解决它。但是,您不需要像那样访问成员,因为 C++ 提供了一种速记方式来执行此操作;而是使用stored_points.at(index)-&gt;x。 -&gt; 基本上是 . 访问器的指针版本。
    • 我之前确实尝试过,但出现了这个错误。错误 C2446: '==' : 没有从 'int' 到 'int *' 的转换 1> 从整数类型到指针类型的转换需要 reinterpret_cast、C-style cast 或 function-style cast 1>c:\users\asher\documents \visual studio 2010\projects\icemaze\icemaze\icemaze.cpp(2126): error C2040: '==' : 'int *' 与 'int' 的间接级别不同
    • 你能再贴一些代码吗?比如,index_x_p 和x 类的Point 成员是什么类型?听起来其中一个是指针,另一个是普通的int。
    【解决方案2】:

    一个非常快速的解决方法是更改​​向量的定义。将 vector&lt;Point&gt; 改为 vector&lt;Point *>。

    但是你应该认真考虑在这种情况下使用智能指针。所以vector&lt;shared_ptr&lt;Point&gt; &gt; 是你可能要考虑的。

    智能指针在 Boost 和 TR1 中可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多