我有:
//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&amp;)'
的匹配函数
但我不知道这里有什么问题。我将int
发送给B::B
...当然只有B b = B(2);
才能正常工作。
修改:已添加public
,抱歉。
答案 0 :(得分:3)
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);
}
答案 1 :(得分:1)
除了在类定义后丢失分号(;
)以及更多错误之外,B
的构造函数是private
!错误消息中有左值引用会分散您的注意力,因为您传递了左值。