错误C2679:binary'=':找不到运算符,该运算符采用'std :: vector< _Ty>类型的右手操作数*'(或没有可接受的转换)

时间:2010-11-17 16:17:17

标签: c++ templates stl

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

#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'=':找不到运算符......

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

2 个答案:

答案 0 :(得分:8)

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

但我认为你可能误解了new在这里的用法。您可能根本不应该使用向量指针。只需删除第neighbors = new vector<T>()行即可。矢量对象将自动初始化并可供使用。

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

vector<T> neighbors;

这样,您不必担心内存管理,并且当vector对象超出范围时会自动销毁它。

答案 1 :(得分:1)

vector<T>  neighbors;
neighbors = new vector<T>();

邻居不是指针。

使用向量的全部意义并不是明确地管理内存。 实际上在您的节点构造函数中,邻居是默认初始化的,所以不要初始化。您的构造函数可能如下所示:

Node(){}

所以你可以省略它:)

相关问题