0

我有一个类打印机

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

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

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

有一个错误说我不能使用对结构的临时实例的引用。有办法解决这个问题吗?

谢谢

4

3 回答 3

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
};
于 2012-07-11T20:47:28.203 回答
0

您可以通过一步声明 struct foo 并定义 f 来使 Oli 的答案略短:

class Printer{
    struct foo{
        int i;
        foo(int i_) : i(i_) {}
    } f;
public:
    Printer() : f(0) {}
};
于 2012-07-11T21:05:17.313 回答
0

我认为您实际上不想引用foofoo它本身。

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

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

于 2012-07-11T20:47:11.950 回答