构造函数调用错误:理解“非类类型中的成员请求”
使用特定构造函数参数实例化对象时,程序员可能会遇到错误“请求‘..’中的非类类型的成员‘..’。”理解此错误的根源对于有效解决该错误至关重要。
提供的代码示例演示了该问题。 Foo 类拥有两个构造函数:一个不带参数的默认构造函数和一个接受单个整数参数的构造函数。按预期使用参数化构造函数实例化 foo1。但是,调用默认构造函数会导致编译错误。
为什么会出现这种情况?语法
Foo foo2();
将自身误解为函数声明。编译器将其视为声明了一个名为 foo2 且返回类型为 Foo 的函数,需要基于括号的参数。但是,其目的是使用默认构造函数实例化名为 foo2 的对象,该构造函数不带任何参数。
因此,编译器将 foo2 指定为名为 Foo() 的非类类型。此指定会阻止访问 Foo 类中定义的方法,从而导致 foo2.bar() 的调用无效。
要纠正此错误,语法应调整为:
Foo foo2;
通过省略括号,编译器使用默认值将
Foo foo2
解释为 foo2 的对象声明构造函数。这将成功实例化 Foo 类型的对象,允许访问其成员函数,包括 bar()。
以上是为什么'Foo foo2();”导致'请求非类类型成员”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!