“没有匹配的构造函数用于初始化”with vector

时间:2013-12-07 09:51:06

标签: c++ vector initialization

第3行(vector :: push_back)引发此错误

No matching constructor for initialization of 'CCoordinate'

尝试编译时

main(){
     [...]
1    vector<CCoordinate> coordinates;
2    CCoordinate * a = new CCoordinate();
3    coordinates.push_back(*a);
     [...]
}

但是,CCoordinate类确实有公共构造函数

public:
    CCoordinate(float X = 0, float Y = 0);
    CCoordinate(CCoordinate& orig);
    ~CCoordinate();

我错过了什么?在vector :: pushback(* object)中取消引用对象适用于基元,例如像整数一样。

此致 克里斯托弗

2 个答案:

答案 0 :(得分:4)

复制构造函数应该通过const引用获取参数:

CCoordinate(const CCoordinate& orig);

这将允许来自临时对象的新对象的构造函数。

您也不需要任何动态分配,只需编写

即可
coordinates.push_back(CCoordinate());

答案 1 :(得分:0)

这是错误,因为没有默认构造函数。请定义CCoordinate的默认构造函数。添加默认构造函数后,请从此参数化构造函数中删除默认参数。否则,在某些情况下,它会给你一个模糊的函数错误。

在默认构造函数中,使用0初始化它。