首页 >后端开发 >C++ >为什么'Foo foo2();”导致'请求非类类型成员”错误?

为什么'Foo foo2();”导致'请求非类类型成员”错误?

Barbara Streisand
Barbara Streisand原创
2024-12-01 01:22:11473浏览

Why Does

构造函数调用错误:理解“非类类型中的成员请求”

使用特定构造函数参数实例化对象时,程序员可能会遇到错误“请求‘..’中的非类类型的成员‘..’。”理解此错误的根源对于有效解决该错误至关重要。

提供的代码示例演示了该问题。 Foo 类拥有两个构造函数:一个不带参数的默认构造函数和一个接受单个整数参数的构造函数。按预期使用参数化构造函数实例化 foo1。但是,调用默认构造函数会导致编译错误。

为什么会出现这种情况?语法

Foo foo2();

将自身误解为函数声明。编译器将其视为声明了一个名为 foo2 且返回类型为 Foo 的函数,需要基于括号的参数。但是,其目的是使用默认构造函数实例化名为 foo2 的对象,该构造函数不带任何参数。

因此,编译器将 foo2 指定为名为 Foo() 的非类类型。此指定会阻止访问 Foo 类中定义的方法,从而导致 foo2.bar() 的调用无效。

要纠正此错误,语法应调整为:

Foo foo2;

通过省略括号,编译器使用默认值将

Foo foo2

解释为 foo2 的对象声明构造函数。这将成功实例化 Foo 类型的对象,允许访问其成员函数,包括 bar()。

以上是为什么'Foo foo2();”导致'请求非类类型成员”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn