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

标签 c++

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

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/

相关文章:

c++ - CUDA - 如果我选择了太多 block 怎么办?

c++ - 在复制构造函数中复制 vector 的 vector

c++ - 对惰性计算决胜元素的 vector 进行排序

由静态数据字段引起的消费者文件中的 C++ 错误链接

c++ - Boost multi_index_container,通过标签获取索引导致编译错误

c++ - 在带有 Visual Studio 的 Windows 上使用 swig -go

c++ - C 和 C++ 编译器对以下代码给出不同的消息,为什么?

java - Python/C++/Java : Is there a library that will recognize characters and tell me where they are in an image?

c++ - 由于 'Library not loaded' 'image not found' 导致 eclipse mac 安装 boost 错误

c++ - 新 std::map 条目中指针的默认值