gpt4 book ai didi

c++ - 错误 : no matching function for call to 'A::A(A)'

转载 作者:太空狗 更新时间:2023-10-29 23:35:32 24 4
gpt4 key购买 nike

我编写了一个非常基础的类

class A
{
int n;
public:
A(int& val){val=n;}
A(const int& val=0){n=val;}
A(A& val){n=val.n;}//work without this constructor
};

int main()
{
A a=3;//want to call A::A(const int&)
return 0;
}

我不想使用 A 实例的拷贝创建构造函数(供将来使用)这个简单的代码有什么问题?

错误信息:

...\main.cpp||In function 'int main()':|
...\main.cpp|16|error: no matching function for call to 'A::A(A)'|
...\main.cpp|16|note: candidates are:|
...\main.cpp|11|note: A::A(A&)|
...\main.cpp|11|note: no known conversion for argument 1 from 'A' to 'A&'|
...\main.cpp|10|note: A::A(const int&)|
...\main.cpp|10|note: no known conversion for argument 1 from 'A' to 'const int&'|
...\main.cpp|9|note: A::A(int&)|
...\main.cpp|9|note: no known conversion for argument 1 from 'A' to 'int&'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

似乎 3 被认为是 A 的一个实例?

如果我添加 A(const A& val){n=val.n;}选择构造函数 A(const int&)

如果没有 A(const A& val),我该怎么做才能成功编译?

最佳答案

问题是你的复制构造函数:A(A& val) { n=val.n;

给定这一行 A a = 3; 一种可能性是使用 A a = A(3) ,这又将使用复制构造函数。但是,将临时绑定(bind)到非常量是违反标准的。一个合适的复制构造函数将解决这个问题。

示例代码

#include <iostream>

class A
{
int n;

public:
A(int& val) : n(val) { std::cout << "A(int&)\n"; }
A(const int& val=0) : n(val) { std::cout << "A(const int&)\n"; }
A(const A& val) : n(val.n) { std::cout << "A(const A&)\n"; }
};

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

示例输出

A(const int&)

Live Example

注意:

  • 上面的代码正确使用了初始化列表
  • 输出显示复制构造函数并未实际调用

关于c++ - 错误 : no matching function for call to 'A::A(A)' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35203717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com