C++ “;没有用于初始化”;的匹配构造函数;带向量

C++ “;没有用于初始化”;的匹配构造函数;带向量,c++,vector,initialization,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); [...] } 我错

第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);
     [...]
}
我错过了什么?在vector::pushback(*object)中取消引用对象适用于基本体,例如整数

问候
Christoph

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


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

这是错误,因为没有默认构造函数。请定义
CCoordinate
的默认构造函数。添加默认构造函数后,立即从此参数化构造函数中删除默认参数。否则,在某些情况下,它会给您带来不明确的函数错误


在默认构造函数中,将其初始化为0。

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

CCoordinate(const CCoordinate& orig);

这将允许从临时对象构造新对象

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

coordinates.push_back(CCoordinate());

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

CCoordinate(const CCoordinate& orig);

这将允许从临时对象构造新对象

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

coordinates.push_back(CCoordinate());

坏标题(和好标签):它不是C,而是C++!您应该详细介绍所使用的编译器(是GCC4.8吗?),以及您使用的标准版本(是C++11吗?)。哦,对不起,只是一个复制粘贴错误。这不是问题!旁注:删除内存泄漏ccoordina*a=newccoordinate();并生成下一行坐标。将_向后推(CCoordinate());坏标题(和好标签):它不是C,而是C++!您应该详细介绍所使用的编译器(是GCC4.8吗?),以及您使用的标准版本(是C++11吗?)。哦,对不起,只是一个复制粘贴错误。这不是问题!旁注:删除内存泄漏ccoordina*a=newccoordinate();并生成下一行坐标。将_向后推(CCoordinate());非常感谢。康斯特是个问题。。。现在我知道了,这很明显。动态分配只是因为我无法解决问题。。你们太棒了!“这将允许从临时对象构造新对象”不是问题所在。问题是,
push_back
的形式参数是对
const
的引用,它被传递给构造函数。谢谢!康斯特是个问题。。。现在我知道了,这很明显。动态分配只是因为我无法解决问题。。你们太棒了!“这将允许从临时对象构造新对象”不是问题所在。问题是,
push_back
的形式参数引用了传递给构造函数的
const
。不能
ccoordination(float X=0,float Y=0)
充当默认构造函数吗?不是每种情况下都可以。尝试使用新运算符分配一个CCocord数组。@VioletGiraffe它是一个默认构造函数,而不仅仅是一个“行为”类似的构造函数。默认构造函数的定义是可以不带参数调用的。我甚至不能删除参数,因为代码的其余部分将不再工作。答案如上所述,复制构造函数中的常量不需要删除参数。只需定义一个默认构造函数并删除
默认参数
。不能
协调(float X=0,float Y=0)
作为默认构造函数吗?不是每种情况都可以。尝试使用新运算符分配一个CCocord数组。@VioletGiraffe它是一个默认构造函数,而不仅仅是一个“行为”类似的构造函数。默认构造函数的定义是可以不带参数调用的。我甚至不能删除参数,因为代码的其余部分将不再工作。答案如上所述,复制构造函数中的常量不需要删除参数。只需定义一个默认构造函数并删除
默认参数