- 主题:Qt 特有,还是 c++ ?
在Debian9下出现的问题。
两个自定义的类 class A , class B
其中, class B 的构造函数的参数 为 class A对象,
然后,
A a ;
B b1(a);
B b2(a) ;
QVector<B> vecB;
vecB.append(b1);
vecB.append(b2);
报错,
no matching function for call to ‘B::B()’
new (dst++) T();
candidate expects 1 argument, 0 provided .
下面的这样调用也会出问题:
vecB.data();
vecB[i] ;
B的构造函数得有一个默认的参数才行 ,为毛???
--
修改:zhanghaoX FROM 121.69.95.*
FROM 121.69.95.*
cpp stl 的 vector<> 也一样,需要一个复制构造函数。
class B {
public:
B(); // 构造函数
B(const B &other); // 复制构造函数
};
这是 cpp 的问题。
【 在 zhanghaoX (环顾四方有效) 的大作中提到: 】
: 在Debian9下出现的问题。
: 两个自定义的类 class A , class B
: 其中, class B 的构造函数的参数 为 class A对象,
: ...................
--
FROM 112.47.93.*
把 B的构造函数的参数改为 A的指针就可以,为何 ?
【 在 hgoldfish (老鱼) 的大作中提到: 】
: cpp stl 的 vector<> 也一样,需要一个复制构造函数。
: class B {
: public:
: ...................
--
FROM 121.69.95.*
发个最小可重现代码看看吧。
我 cpp 不是很熟。依样画葫芦能用就行。
只知道 vector<> 需要这两个构造函数,或许再加一个 B(const B&&),剩下的懒得管了。
【 在 zhanghaoX (环顾四方有效) 的大作中提到: 】
: 把 B的构造函数的参数改为 A的指针就可以,为何 ?
--
FROM 112.47.93.*
class x
{
public:
x(int a)
{ int b = a ;} ;
} ;
QVector< x > vec_X ;
x x1(1);
x x2(2);
vec_X.append( x1 ) ;
vec_X.append( x2 ) ;
x *xx = vec_X.data();
x xx1 = vec_X[1];
找到一个一样的:
https://stackoverflow.com/questions/26076997/in-constructor-candidate-expects-1-argument-0-provided
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 发个最小可重现代码看看吧。
: 我 cpp 不是很熟。依样画葫芦能用就行。
: 只知道 vector<> 需要这两个构造函数,或许再加一个 B(const B&&),剩下的懒得管了。
--
FROM 121.69.95.*
卧槽十大了,本版巅峰
--
FROM 171.83.95.*
不 default constructible
换句话说默认的“空”对象长啥样不知道
【 在 zhanghaoX () 的大作中提到: 】
:
: class x
: {
: public:
--
FROM 138.19.103.*
vector里面一般存放指针
--
FROM 140.207.23.*
哈哈哈哈哈
【 在 libgcc (承接各种水军业务) 的大作中提到: 】
: 卧槽十大了,本版巅峰
--
FROM 116.234.18.*