2012-12-09 92 views
0

我在成員函數定義中遇到了一些代碼問題。模板類中新結構的C++語法

//This is a private type 
struct node { 
node *next; 
node *prev; 
T  *o; 
}; 

從.cpp文件中生成的錯誤代碼:

template <typename T> 
void Dlist<T>::function(T *o) 
{ 
node newV = new node; 
.... 
} 

,我認爲是對聲明結構的語法正確,我得到了一個「」

從.h文件中

節點並沒有在此範圍內」的錯誤聲明

然後我嘗試:

Dlist<T>::node *victim; 

我得到了一個「newV沒有在這個範圍內聲明」的錯誤,這讓我更加困惑,因爲這行本身就是一個聲明。

我在.h文件中包含.cpp文件。

任何幫助表示讚賞。

+3

你可以發佈一些最小的代碼來重現問題嗎? – juanchopanza

回答

2

new X返回一個指向X,所以你需要一個調用的結果分配給new nodenode*,而不是一個node

template <typename T> 
void Dlist<T>::function(T *o) 
{ 
    node* newV = new node; 
.... 
} 

看到一個例子here

請注意,使用原始指針來動態分配對象是相當棘手的,並且必然會導致內存管理錯誤。我會建議使用smart pointers或自動分配的變量(非指針)。

struct node { 
    std::unique_ptr<node> next; 
    std::unique_ptr<node> prev; 
    std::unique_ptr<T>  o; 
}; 
+0

如果這個人甚至不知道指針,他將無法應付管理自己的記憶。沒有智能指針 - > downvote。 – Puppy

+0

@DeadMG我試圖解決眼前的問題。我將添加一些關於智能指針的內容。 – juanchopanza