带有std :: copy函数的MinGW中的C ++源代码编译错误

时间:2015-01-29 23:24:46

标签: c++

我正在尝试编译以下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);
                            ^

1 个答案:

答案 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);