想象一下,我有一个C ++类Foo和一个类Bar,它必须使用一个构造函数创建,其中传递一个Foo指针,并且该指针在Bar实例生命周期中保持不变。这样做的正确方法是什么?
事实上,我认为我可以像下面的代码一样写,但它不能编译..
class Foo;
class Bar {
public:
Foo * const foo;
Bar(Foo* foo) {
this->foo = foo;
}
};
class Foo {
public:
int a;
};
欢迎提出任何建议。
答案 0 :(得分:76)
您需要在初始化列表中执行此操作:
Bar(Foo* _foo) : foo(_foo) {
}
(请注意,我重命名了传入变量以避免混淆。)
答案 1 :(得分:18)
我相信你必须在初始化器中完成它。例如:
Bar(Foo* foo) : foo(foo) {
}
作为旁注,如果你永远不会改变foo指向的内容,请将其作为参考传递:
Foo& foo;
Bar(Foo& foo) : foo(foo) {
}
答案 2 :(得分:14)
初始化const成员和其他特殊情况(例如父类)可以在初始化列表
中完成class Foo {
private:
const int data;
public:
Foo(int x) : data(x) {}
};
或者,类似地,对于父初始化
class Foo {
private:
int data;
public:
Foo(int x) : data(x) {}
};
class Bar : Foo {
public:
Bar(int x) : Foo(x) {}
};
答案 3 :(得分:6)
您需要在初始化列表中初始化foo。
class Bar {
Foo* const foo;
public:
Bar(Foo* f) : foo(f) {...}
};
答案 4 :(得分:2)
使用参考:
Foo& foo;
Bar(Foo& f) : foo(f) { }
然后,您可以在foo
Bar
foo.doSomething();
答案 5 :(得分:0)
尝试:Bar(Foo* xfoo) : foo(xfoo) {}