2011-05-10 120 views
1

我有以下代碼: file.h:C++/Ubuntu - 在模板錯誤

#ifndef __ANA_H__ 
#define __ANA_H__ 

template <class T> 
class ana { 

class ana1{//code 
      }*anna1; 

    public: 
    bool method(T& data,ana::ana1 &a); 
}; 

#endif 

file.cpp:

#include <ana.h> 
#include <iostream> 
using namespace std; 

template <class T> 
bool ana<T>::method(T& data,ana::ana1 &t) { 
    cout << "Data = " << data << endl; 
    if(data > 0) { 
    return true; 
    } 
    return false; 
} 

我有錯誤:ana::ana1 is not a type。如何解決這個錯誤?我在哪裏錯了?需要一些help.thx 我在ubuntu工作,我編譯使用g ++的代碼。我從我發佈的.h和.cpp創建了一個.a。

+1

的名字,像'__ANA_H__',其中包含下劃線,或以下劃線開始在用戶編寫的代碼是不允許的。將其更改爲'ANA_H' – 2011-05-10 09:57:29

+0

@unapersson:包含下劃線很好;包含*兩個連續的*下劃線是問題(以及從一個當然開始)。 – ildjarn 2011-05-10 10:03:57

+0

@ildjam確實 - 這就是我的意思,但顯然沒有打字。 – 2011-05-10 10:07:13

回答

2

作出這樣的

// (declaration): 
bool method(T& data, ana1& t); 

// (definition): 
bool ana<T>::method(T& data, typename ana<T>::ana1& t) { 
+0

ana1是ana的一個子類。我可以;只是有ana1。我需要ana :: ana1,不是嗎? – linuxx 2011-05-10 09:58:47

+0

可以請你重寫正確的代碼嗎?我需要一些幫助:) – linuxx 2011-05-10 09:59:36

+0

@linuxx:它不是一個子類,它是一個嵌套類。 – 2011-05-10 09:59:53

2

有了模板,你應該把declaration and definition into the same file。這可能是這樣的,你的情況:

#ifndef __ANA_H__ 
#define __ANA_H__ 

template <class T> 
class ana { 

class ana1{//code 
      }*anna1; 

    public: 
    bool method(T& data,ana1 &a) { 
     cout << "Data = " << data << endl; 
     if(data > 0) { 
      return true; 
     } 
     return false; 
    } 
}; 

#endif 
+0

正如他之前被告知的那樣。 – 2011-05-10 10:40:03