c ++类构造函数,引用结构

时间:2012-07-11 20:38:22

标签: c++ reference constructor initialization

我有一个打印机

class Printer{
     struct foo{
        int i;
     };
     foo & f;
};

当我调用Printer的构造函数时,我需要初始化f,因为f是一个引用,但我想要的是首先调用foo的构造函数并创建它的实例然后将其赋值给f。我遇到的问题是如果我打电话

Printer::Printer():f(foo(0)){ }

有一个错误说我无法使用对结构的临时实例的引用。有什么方法可以解决这个问题吗?

由于

3 个答案:

答案 0 :(得分:2)

在这种情况下,参考没有任何意义。请尝试以下方法:

class Printer{
     struct foo{
        int i;
        foo(int i_) : i(i_) {}  // Define a constructor
     };

     foo f;  // Not a reference anymore!

public:
     Printer::Printer() : f(0) {}  // Initialise f
};

答案 1 :(得分:0)

我认为您实际上不希望引用foo而是foo本身。

当你致电foo(0)时,它会创建一个结构并将其作为“浮动”对象返回。你不能为它分配一个引用,因为没有人“保持”它,并且一旦构造函数退出就会被丢弃。

所以,如果你想保留对它的引用,你首先必须将它存储在一个持久的实际对象中。在这种情况下,您可能只想将整个结构保留在类中。

答案 2 :(得分:0)

通过声明struct foo并在一步中定义f,可以使Oli的答案略微缩短:

class Printer{
    struct foo{
        int i;
        foo(int i_) : i(i_) {}
    } f;
public:
    Printer() : f(0) {}
};