我想實現C++以下幾點:如何使用類的模板參數作爲類成員的模板參數?
template <class T>
class Inner
{
public:
Inner(T inData){data = inData;};
~Inner(void){};
T data;
};
template <class T>
class Outer
{
public:
Outer(Inner<T> in){inner = in;};
~Outer(void){};
Inner<T> inner;
};
int main(void)
{
Inner<int> in (10);
Outer<int> out (in);
std::cout << out.inner.data;
}
在2010年MSVS編譯,我得到以下錯誤:
c:\...\main.cpp(15): error C2512: 'Inner<T>' : no appropriate default constructor available
with
[
T=int
]
c:\users\gaff\documents\visual studio 2010\projects\pgp(c++)\pgp(c++)\main.cpp(15) : while compiling class template member function 'Outer<T>::Outer(Inner<T>)'
with
[
T=int
]
c:\users\gaff\documents\visual studio 2010\projects\pgp(c++)\pgp(c++)\main.cpp(24) : see reference to class template instantiation 'Outer<T>' being compiled
with
[
T=int
]
顯然,我在這裏缺少一些基本的瞭解,但我有沒有線索如何解決這個問題,或者即使我想要實現的是可能的。
對於它的價值,這裏是編譯沒有任何問題的Java實現:
public class Inner<T> {
public T data;
public Inner(T inData) {
data = inData;
}
}
public class Outer<T> {
public Inner<T> inner;
public Outer(Inner<T> in) {
inner = in;
}
}
public class Main {
public static void main(String args[]){
Inner<Integer> in = new Inner<Integer>(10);
Outer<Integer> out = new Outer<Integer>(in);
System.out.println(out.inner.data);
}
}
有什麼建議?
乾杯
JimmidyJoo
這不是一個複製構造函數。複製構造函數是'Outer(Outer const&)' – 2011-06-01 00:54:33
@Neil G:我從來沒有說過它是一個拷貝構造函數,我說實現一個,然後使用它初始化內部元素。 – GWW 2011-06-01 00:55:20
@GWW,啊,你是指Inner。但是,你會在這樣一個複製構造函數中放入什麼? Inner的默認拷貝構造函數應該沒問題。 T已經必須是可複製構造的,因爲構造函數按值取T。 – 2011-06-01 00:57:40