我在模板和合成式编码方面遇到了一些麻烦。我有一个使用* this参数在另一个构造函数内创建的对象。对不起,如果我不清楚的话。代码如下:
在outer.h文件中:
class outer {
public:
outer(int w, int l);
int getWidth();
int getLength();
private:
inner<outer> test(*this);
int width;
int length;
};
outer::outer(int w, int l) {
width = w;
length = l;
}
int outer::getLength() {
return length;
}
在inner.h文件中
template<typename T>
class inner {
public:
inner(T &name);
private:
int top;
int bot;
};
template<typename T>
inner<T>::inner(T &name) {
top = name.getLength() /2;
bot = -name.getLength() / 2;
}
我不知道是否允许这样做,因为我无法在网上找到解决此问题的任何内容。编译器在outer.h中遇到了* this语句的问题。
提前感谢您的帮助。
答案 0 :(得分:3)
如果您使用的是C ++ 03,则必须在构造函数中执行初始赋值。
class outer {
public:
outer(int w, int l);
int getWidth();
int getLength();
private:
// Member variables are initialized in the order they are declared here.
int width;
int length;
inner<outer> test;
};
outer::outer(int w, int l)
: width(w)
, length(l)
, test(*this)
{
}
编辑:Kerrek SB还注意到您需要更改变量的顺序。它们按照您在课堂中声明它们的顺序初始化,并且最后要初始化test
需要,因此其他变量已初始化。