2010-11-17 154 views
2

构建图形时我有以下几点。错误C2679:二进制'=':找不到操作符,它需要类型为'std :: vector <_Ty> *'的右侧操作数(或者没有可接受的转换)

#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:二进制 '=':没有操作员发现...

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

回答

7

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

但我想你可能误解了这里使用new。你可能甚至不应该使用向量指针。只要删除行neighbors = new vector<T>()。矢量对象将被自动初始化并准备使用。

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

vector<T> neighbors;

这样,您就不必担心内存管理,以及矢量对象将自动被摧毁当它超出范围。

+0

菜鸟错误...这就是为什么离开并喝咖啡是好事。谢谢,查尔斯! – soulia 2010-11-17 16:35:54

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

邻居不是指针。

使用向量的关键点不是明确地管理内存。 事实上,在你的节点构造函数中,邻居是默认初始化的,所以不要初始化。你的构造可能是这样的:

Node(){} 

所以你可以忽略它:)

相关问题