2011-05-07 31 views
1
Class A{ 
public: 
     MyVec<A> test; //problem error: ‘MyVec’ does not name a type 
}; 

Class B{ 
public: 
     template<typename Obj> 
     Class MyVec{ 
      //some methods... 
     }; 
private: 
     MyVec<A> test1; //ok 
}; 

編譯器抱怨測試定義的行。訪問類的類

+0

您發佈的代碼不是C++。請發佈導致問題的真實代碼。 – 2011-05-07 21:02:14

+0

但這一次它抱怨B沒有類型。 – thetux4 2011-05-07 21:03:18

回答

2

在A的定義之前,您沒有定義甚至沒有聲明MyVec。這使得在A中不能使用該類型。這是由於聲明的順序。

1

MyVec的全名是B::MyVec。當您在B內時,B::部分是可選的。

+0

移動A類的定義在B類 – asami 2011-05-07 21:10:06

+0

@asami您在C++編譯時被叮咬了模型。一個C++編譯器只執行一次傳遞,這意味着如果你想在'A'中使用'B','B'必須在'A'之前聲明。 – 2011-05-07 21:11:46

+0

我意識到只要我發佈評論:)但這是一個困境。他在A中使用B :: MyVec,這意味着它在A之前被定義 – asami 2011-05-07 21:18:01