2010-11-17 152 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(){} 

所以你可以忽略它:)

相關問題