我试图使生成器类保持生成的类,并且都扩展相同的类型。 (在我的程序中,它正在尝试使虚拟化具有通用的概念),如下所示:
template <class T>
class V : public T {
T& owner; // the T owner
template <class... Args>
explicit V(T &_owner, Args... args) : T(args...) {
owner = _owner; // holds the owner
}
}
...
int main() {
type t = type(512);
V<type> vt = V(t, 256); //ERROR: undefinied reference...(to constructor expanded)
}
但是在函数main中调用构造函数时遇到了该错误,我必须更改什么?我在CLion IDE中使用的是C ++ 17。
感谢您的帮助
答案 0 :(得分:1)
以下是对您代码的一些修复:
template <class T>
class V : public T {
// needs to be public
public:
T& owner;
template <class... Args>
explicit V(T &_owner, Args... args)
: T(args...),
// references need to be initialized here
owner(_owner)
{ }
};
/// the super class
struct memory
{
memory(int _i) : i(_i) {}
int i;
};
int main() {
memory m = memory(512);
auto vm = V<memory>(m, 256);
return 0;
}
答案 1 :(得分:0)
您在代码中的错误之一是您的class's
constructor
。当您尝试instantiate
中的class template
对象时,您的main()
class's
是constructor
。它必须是private
。
另一个是当您从public
class's
分配member reference
constructor's
时;您不应该在parameter
正文中使用assignment operator
,而应该使用constructor's
constructor's
。