【问题标题】:Error with C++ Constructors [duplicate]C ++构造函数错误[重复]
【发布时间】:2014-12-17 03:19:54
【问题描述】:

1.如果我这样实例化对象,不会发生错误。

class A {};

int main () {
    A a = A ();
    A &b = a;
    return 0;
} 

2.如果我以这种方式实例化对象,当a 的引用被复制到b 时,编译器会报告error C2440: 'initializing' : cannot convert from 'A (__cdecl \*)(void)' to 'A &'

class A {
};

int main () {
    A a();
    A &b = a;
    return 0;
}

3. 但是如果我在第二种方式的实例化过程中添加一个带参数的构造函数并将一些参数传递给这个ctor,就没有错误!

class A {
public:
    A (int a) {}
};

int main () {
    A a(5);
    A &b = a;
    return 0;
}

谁能解释一下?

【问题讨论】:

标签: c++ object constructor reference instantiation


【解决方案1】:

当你创建类“A”的对象“a”并且你想调用不带参数的构造函数时,你不能写“A a();”,而只能写“A a;”。我过去也时常犯这个错误。标准构造函数被自动调用。

【讨论】:

  • 抱歉,输入错误。不要写 A a ()。你必须离开刹车。再次抱歉,是我的错。
【解决方案2】:

在第二个示例中,编译器认为A a(); 是一个返回A 的函数,称为a,不带任何参数。

error C2440: 'initializing' : cannot convert from 'A (__cdecl *)(void)' to 'A & 表示编译器不知道如何将返回 A 且不带参数 (void) 的函数转换为类型为 A 的引用。

【讨论】:

  • 谢谢@millsj,这几乎解释了它。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
相关资源
最近更新 更多