我正在尝试编译以下C ++代码并遇到一些错误。我错过了一些图书馆吗?我在Windows 7 64位上使用MinGW。
//ch 18
#include <algorithm>
class vector{
int sz;
double* elem;
public:
vector(const vector&);
};
vector:: vector(const vector& arg)
:sz{arg.sz}, elem{new double[arg.sz]}
{
std::copy(arg,arg.sz,elem);
}
以下是错误消息。
$ g++ ch18copy.cpp -std=c++11 -o ch18copy
ch18copy.cpp: In copy constructor 'vector::vector(const vector&)':
ch18copy.cpp:15:28: error: no matching function for call to 'copy(const vector&,
const int&, double*&)'
std::copy(arg,arg.sz,elem);
^
ch18copy.cpp:15:28: note: candidate is:
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\algorithm:61:0,
from ch18copy.cpp:3:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algobase.h:450:5: note: temp
late<class _II, class _OI> _OI std::copy(_II, _II, _OI)
copy(_II __first, _II __last, _OI __result)
^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algobase.h:450:5: note: te
mplate argument deduction/substitution failed:
ch18copy.cpp:15:28: note: deduced conflicting types for parameter '_II' ('vect
or' and 'int')
std::copy(arg,arg.sz,elem);
^
答案 0 :(得分:0)
看起来你没有为std :: copy使用正确的参数。
来自http://www.cplusplus.com/reference/algorithm/copy/:
template <class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);
从他们的例子:
int myints[]={10,20,30,40,50,60,70};
std::vector<int> myvector (7);
std::copy ( myints, myints+7, myvector.begin() );
因此前两个参数是您要复制的范围的开始和结束,第三个参数是您要复制到的范围。
在你的情况下,这看起来像这样(免责声明:没有测试这个):
std::copy(arg.elem, arg.elem + arg.sz, elem);