下面的代码:
#include <iostream>
using namespace std;
class Myclass
{
private:
Myclass ();
public:
int num;
};
int main()
{
Myclass foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 Eclipse 中编译时不会出现任何警告或错误。
然而
#include <iostream>
using namespace std;
class Myclass
{
private:
Myclass ();
public:
int num;
};
int main()
{
Myclass foo;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给我这个错误:error: 'Myclass::Myclass()' is private within this context
为什么foo会给我这个错误,而 foo() 却没有?是foo()被误认为是函数还是date_type name()有特殊含义?
为什么 MyClass foo() 可以访问私有默认构造函数?
它不能(允许您调用私有构造函数的奇特技巧)。
foo() 是否被误认为是一个函数
Myclass foo(); 是一个函数声明。错误在于期望它是别的东西。要调用构造函数,请编写:
Myclass foo; // or
Myclass foo{};
Run Code Online (Sandbox Code Playgroud)
由于这个错误相当常见,编译器通常会发出警告。不要忽略警告,并在代码没有消息时提高警告级别。
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |