我是新来的C++模板。下面的代码试图在给出不同的输入类型时获取不同类型的数据向量。C++模板成员函数错误
MS2013给出了一些奇怪的错误:
error LNK2019: unresolved external symbol "public: void __thiscall data::get_data<int>(class std::vector<int,class std::allocator<int> > &)const " ([email protected]@[email protected]@[email protected][email protected]@[email protected]@@[email protected]@@Z) referenced in function _main
什么问题?使用参数std :: vector &指定模板函数是不正确的?
新更新: 我将成员函数定义移出。 还附加了主函数中的函数调用。错误是一样的。
#include "data.h"
int main(int argc, char* argv[])
{
data d1(2);
std::vector<int32_t> ld;
d1.get_data(ld);
return 0;
}
class data {
private:
std::vector<int16_t> sdata; // container for 16-bit fixed point
std::vector<int32_t> ldata; // container for 32-bit fixed point
std::vector<char> cdata; //
std::vector<float> fdata; // container for 32-bit floating point
std::vector<double> ddata; // container for 64-bit floating point
int16_t dtype;
public:
data(int16_t type) :sdata(10, 0), ldata(10, 1), cdata(10, 'c'),
fdata(10, 2.0), ddata(10, 3.00),dtype(type){}
template <typename T>
void get_data(std::vector<T>& outdata) const;
};
template <typename T>
void data::get_data(std::vector<T>& outdata) const {
switch (dtype) {
case 1:
outdata = sdata;
break;
case 2:
outdata = ldata;
break;
case 3:
outdata = cdata;
break;
case 4:
outdata = fdata;
break;
case 5:
outdata = ddata;
break;
default:
std::cerr << "Unknown data format" << std::endl;
break;
}
}
删除数据''::从你的成员函数'get_data'。 – BeschBesch
这是一个链接器错误,并且在此之前你必须得到编译错误,因为你不能将大多数成员分配给'std :: vector'。 –
molbdnilo
也就是说,模板已被实例化为成员函数'void data :: get_data(std :: vector&outdata)const',并且该函数未通过类型检查。 –
molbdnilo