我有一个类打印机
class Printer{
struct foo{
int i;
};
foo & f;
};
当我调用Printer的构造函数时,我需要初始化f,因为f是一个引用,但我想要的是首先调用foo的构造函数并创建它的一个实例,然后将它分配给f。我的问题是如果我打电话
Printer::Printer():f(foo(0)){ }
有一个错误说我不能使用对结构的临时实例的引用。有办法解决这个问题吗?
谢谢
我有一个类打印机
class Printer{
struct foo{
int i;
};
foo & f;
};
当我调用Printer的构造函数时,我需要初始化f,因为f是一个引用,但我想要的是首先调用foo的构造函数并创建它的一个实例,然后将它分配给f。我的问题是如果我打电话
Printer::Printer():f(foo(0)){ }
有一个错误说我不能使用对结构的临时实例的引用。有办法解决这个问题吗?
谢谢
在这种情况下,引用没有任何意义。请尝试以下操作:
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
};
您可以通过一步声明 struct foo 并定义 f 来使 Oli 的答案略短:
class Printer{
struct foo{
int i;
foo(int i_) : i(i_) {}
} f;
public:
Printer() : f(0) {}
};
我认为您实际上不想引用foo
但foo
它本身。
当您调用 时foo(0)
,它会创建一个结构并将其作为“浮动”对象返回。您不能为其分配引用,因为没有人“持有”它,并且一旦构造函数退出它就会被丢弃。
所以,如果你想保留对它的引用,你首先必须将它存储在一个持久的实际对象中。在这种情况下,您可能只想将整个结构保留在类中。