我有一个打印机
class Printer{
struct foo{
int i;
};
foo & f;
};
当我调用Printer的构造函数时,我需要初始化f,因为f是一个引用,但我想要的是首先调用foo的构造函数并创建它的实例然后将其赋值给f。我遇到的问题是如果我打电话
Printer::Printer():f(foo(0)){ }
有一个错误说我无法使用对结构的临时实例的引用。有什么方法可以解决这个问题吗?
由于
答案 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) {}
};