我是新來的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