C++ 模板成员函数错误
c++ template member function error
我是C++模板的新手。当给定不同的输入类型时,以下代码尝试获取不同类型的数据向量。
MS2013 给出了一些奇怪的错误:
error LNK2019: unresolved external symbol "public: void __thiscall data::get_data<int>(class std::vector<int,class std::allocator<int> > &)const " (??$get_data@H@data@@QBEXAAV?$vector@HV?$allocator@H@std@@@std@@@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;
}
}
不需要
模板,你可以这个
class data {
private:
std::vector<int16_t> sdata; // container for 16-bit fixedpoint
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)
{
}
void get_data(std::vector<int16_t>& outdata)
{ outdata = sdata; }
void get_data(std::vector<int32_t>& outdata)
{ outdata = ldata; }
void get_data(std::vector<char>& outdata)
{ outdata = cdata; }
void get_data(std::vector<float>& outdata)
{ outdata = fdata; }
void get_data(std::vector<double>& outdata)
{ outdata = ddata; }
};
int main(int argc, char* argv[])
{
data d1(2);
std::vector<int32_t> ld;
d1.get_data(ld);
return 0;
}
您正在尝试在运行时使用编译时构造。这是不可能的。
看声明:
void data::get_data(std::vector<T>& outdata) const
要编译并包含在程序中,编译器需要在编译时知道T
的类型。
但是T
的类型只有在运行时才知道,因为它是变量dtype
的值在函数内部确定的,所以在运行时。
你真正想要的要么是一个多态类,要么是一个简单的函数。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误