我们有一个模板类,其中包含另一个包含带参数化构造函数的模板对象的类。
template<class T>
class A {
public:
class B {
public:
T object;
B(T obj) {
this->object = obj;
}
};
T foo(T obj) {
B *b = new B(obj);
return b->object;
}
};
我们还有一类我们想要的对象作为foo()参数:
class Item {
public:
int value;
// Item() {}
// Non-parameter constructor. Within works fine
Item(int value) {
this->value = value;
}
};
注意:在非参数构造函数
Item() {}
代码中运行完美无缺,但由于某种原因,构造函数总是运行一次而不会被显式调用。
此处main()
呼叫a.foo()
:
A<Item> a;
Item item(5);
cout << a.foo(item).value; //expected: 5
最终我们收到了这样的错误:
error: no matching function for call to 'Item::Item()'
B(T obj) {
^
问题:
Class Item {}
如何在没有非参数构造函数的情况下使用此结构生成代码?
提示:我希望在不更改
Class Item {}
定义的情况下使代码生效,因为我是Class A
的提供者,我想特别解决此问题。
使用成员初始化列表解决了错误。感谢Ulrich Eckhardt。
B(T obj) {
this->object = obj;
}
//wrong
B(T obj): object(obj) {}
//correct