向构造函数发送"int",但编译器发送"int&"
Sending `int` to constructor but compiler send `int&`
我有:
//B.h
class B {
public:
B(int);
//...
};
//A.h
#include "B.h"
class A {
vector<B> vec;
public:
void X();
//...
};
//A.cpp
A A::X() {
A a;
for (int i = 1; i <= 10; ++i) {
a.vec.push_back(B(i)); // <<< problem
}
return a;
}
上面写着:
对"B::B(int&)"的调用没有匹配的函数
但我看不出这里出了什么问题。我将int
发送到B::B
。。。当然,只有B b = B(2);
可以正常工作。
编辑:添加public
,抱歉。
B
的构造函数是private
,因为class
的默认访问说明符是private
(struct
的默认访问描述符是public
)。
A
无法查看B
的构造函数。此外,值x
没有值,因此代码具有未定义的行为。
以下代码运行良好:
class B {
public:
B(int) {}
};
class A {
void X(); // Note X() is private.
};
void A::X() {
int x = 42;
B b = B(x);
}
除了类定义后缺少分号(;
)和其他一些错误外,B
的构造函数是private
!错误消息中有一个左值引用会分散你的注意力,因为你正在传递一个左价值。
相关文章:
- 编译器指出结构和 int 说明的错误 2059
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 警告级别为 3 的 int 的 std::vector push_back 处的编译器警告
- 从 int 中剥离位时,编译器会警告一个转换,但不警告其他转换.有解决方法吗?
- 为什么在某些编译器中可以声明像int myarr[noconstant]这样的数组;而不是在其他编译器中?
- 在MSDOS编译器上,用大于最大值的值初始化int时输出混乱
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 尝试将 char* 添加到 int 时触发编译器错误
- 编译器认为 int 是一个字符串.发生了什么事情
- 为什么编译器不断警告我从“int”缩小到“uint8”
- 试图使用int []作为打字模板,编译器未识别函数最小的原型中的参数
- 为什么编译器显示错误"no match for 'operator[]' (operand types are 'carti' and 'int')"
- 为什么c++编译器接受这种初始化?静态int x=x
- C 编译器从Double转换为INT
- (int)-2147483648的结果使用不同的编译器除以(int)-1
- 为什么在所有数据类型中,int 取决于操作系统或编译器
- 使用 G++ -C 的 C++ 编译器错误:编译器将 const 字符串识别为 int
- 我找不到程序中的歧义,但编译器说 check(int) 和 check(float) 之间存在歧义
- 当我使用模板时,编译器无法将函数的返回类型从 double 转换为 int
- C++,实现函数"int next(std::string param)"时出现奇怪的编译器错误