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

sou*_*lia 2 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;
}
Run Code Online (Sandbox Code Playgroud)

...返回错误C2679:binary'=':找不到运算符...

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

Cha*_*via 8

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

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

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

vector<T> neighbors;

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