构建图表时我有以下内容。
#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。怎么了? 谢谢!
答案 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(){}
所以你可以省略它:)