- 主题: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.*
把 B的构造函数的参数改为 A的指针就可以,为何 ?
【 在 hgoldfish (老鱼) 的大作中提到: 】
: cpp stl 的 vector<> 也一样,需要一个复制构造函数。
: class B {
: public:
: ...................
--
FROM 121.69.95.*
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.*
这个 m_a 是 暗含的?
【 在 icingup 的大作中提到: 】
: class B里面因为定义了一个类型为A的成员变量, 比如m_a;
: 在B的构造函数调用之时,需要对这个成员变量m_a初始化,然后才是赋值例如这个:
:
: ...................
--
FROM 221.218.141.*
试了, 应该Qt特有。
代码 用std vector 没问题,
写了个无参数的空构造函数,Qt也没问题了,
Qt看来在 Win和linux的 实现不一样。
【 在 javaboy (喝了咖啡就话多-_-;) 的大作中提到: 】
: 这是c++的问题。
: 看上去QVector存取对象的时候需要拷贝构造。类没有拷贝构造的时候就会报这个错。
: 另外,如果你没有提供默那个x(int)的构造函数,这个class x就是POD。C++编译器会自动生成一个拷贝构造函数,也不会报错。
--
FROM 221.218.139.*