重载构造函数和类成员访问错误
考虑一个具有两个构造函数的类,一个没有参数,另一个有一个整数参数。当按预期使用后一个构造函数创建对象时,使用无参构造函数会导致错误。
例如,编译以下代码片段:
class Foo { public: Foo() {}; Foo(int a) {}; void bar() {}; }; int main() { // This works... Foo foo1(1); foo1.bar(); // This fails... Foo foo2(); foo2.bar(); return 0; }
会生成以下错误:
error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'
出现这个错误是因为编译器解释了代码 Foo foo2();作为名称为“foo2”且返回类型为“Foo”的函数声明。但是,您打算使用无参数构造函数实例化“Foo”类型的对象。
要解决此问题,请修改 Foo foo2();到 Foo foo2;。此更改通知编译器您要使用默认构造函数创建对象。
或者,由于同时存在无参数和单参数构造函数,您可能会遇到指示重载构造函数中存在歧义的错误。在这种情况下,使用 Foo foo2{}; 显式调用无参构造函数;将解决歧义。
以上是为什么我的无参构造函数会导致'请求成员”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!