2013-07-18 61 views
-1

我有錯誤 「無效使用‘這個’非成員函數C++的使用無效「這」在非成員函數

的是編寫代碼來避免的正確方法這個錯誤。

tree.h中:

#ifndef TREE_H 
#define TREE_H 

template <typename T> 
class Node; 

class Tree 
{ 
public: 
    Tree(); 

    template <typename TNodeType> 
    Node<TNodeType> elaborate(Node<TNodeType> &node); 

    Tree* self(); 

    void doSomething(); 
}; 

template <typename TNodeType> 
Node<TNodeType> createNew() { 
    Node<TNodeType> model(this); //<-- ERROR HERE 
    return model; 
} 

#endif // TREE_H 

node.h:

#ifndef NODE_H 
#define NODE_H 

#include <tree.h> 

template <typename TNodeType> 
class Node 
{ 
public: 
    Node(Tree *tree); 

    TNodeType current(); 

private: 
    Tree *_tree; 
}; 

template <typename TNodeType> 
Node<TNodeType>::Node(Tree *tree): 
    _tree(tree) 
{ 
    _tree->doSomething(); 
} 

template <typename TNodeType> 
TNodeType Node<TNodeType>::current() 
{ 
    //some code here 
} 

#endif // NODE_H 

解決。

tree.h中我跳過的聲明:

template <typename TNodeType> 
Node<TNodeType> createNew(); 

我曾在定義 「樹::」 之前忘了 「createNew()

我同意這個問題可以避免;-)。對不起

+4

錯誤信息的哪部分你不明白? – juanchopanza

+0

您是否嘗試瞭解自己的代碼?成功?沒有?爲什麼不?現在刪除你的問題... – 2013-07-18 05:39:29

+0

我意識到了錯誤。我現在想了解如何解決它。 – Sebtm

回答

4

createNew()是一個免費的功能(即不是一個類的成員),因此沒有this的概念。

+0

很好的答案,但我從來沒有聽說過「免費功能」這個詞。這是一個常用術語嗎?我只聽說它叫做「靜態成員函數」或「靜態方法」。 – abelenky

+1

靜態成員函數(或靜態方法,儘管術語「方法」在C++社區中是不常見的)是在類中用關鍵字static聲明的函數。免費功能在課堂外宣佈。是的,這是他們通常的用語。 –

2
template <typename TNodeType> 
Node<TNodeType> createNew() { 
    Node<TNodeType> model(this); //<-- ERROR HERE 
    return model; 
} 

它確實沒有成員函數。 this是C++語言的關鍵字,只能在成員函數中使用。

相關問題