没有非参数构造函数

时间:2018-03-02 15:56:05

标签: c++ constructor parameterized-constructor

我们有一个模板类,其中包含另一个包含带参数化构造函数的模板对象的类。

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

0 个答案:

没有答案