【问题标题】:error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::vector<_Ty> *' (or there is no acceptable conversion)错误 C2679:二进制“=”:未找到采用“std::vector<_Ty> *”类型的右侧操作数的运算符(或没有可接受的转换)
【发布时间】:2010-11-17 16:17:16
【问题描述】:

构建图表时,我有以下内容。

#include <vector>
using namespace std;

template<class T>
class Node
{
private:
  T data;
  Node<T> *link;
  vector<T>  neighbors;
public:
  Node(){neighbors = new vector<T>();};
};

int main()
{
  Node<int> n;
  return 0;
}

...返回错误 C2679: binary '=': no operator found...

我正在使用 VS2010。怎么了? 谢谢!

【问题讨论】:

    标签: c++ templates stl


    【解决方案1】:

    new 运算符返回 指针 类型,但您的成员变量 neighbors 不是指针。因此,您将指针(new 的结果)分配给非指针类型。您的neighbors 变量需要是一个指针:vector&lt;T&gt;* neighbors

    但我认为您可能误解了new 的用法。您甚至可能根本不应该使用向量指针。只需删除行neighbors = new vector&lt;T&gt;()。矢量对象将自动初始化并准备好使用。

    在 C++ 中,new 关键字在堆上分配和初始化对象,之后必须使用delete 释放这些对象。最好通过简单地将对象初始化为自动变量来避免使用new 关键字,例如:

    vector&lt;T&gt; neighbors;

    这样,你就不用担心内存管理了,当vector对象超出范围时会自动销毁。

    【讨论】:

    • 菜鸟错误...这就是为什么最好走开去喝杯咖啡。谢谢,查尔斯!
    【解决方案2】:
    vector<T>  neighbors;
    neighbors = new vector<T>();
    

    neighbors 不是指针。

    使用向量的重点不是显式管理内存。 实际上,在您的节点构造函数中,邻居是默认初始化的,所以不要初始化。您的构造函数可能如下所示:

    Node(){}
    

    所以你可以省略它:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多