2017-03-24 52 views
0

我有一個類內的模板功能的問題。當我打電話的東西()函數的「設置」,VS告訴我: 錯誤C2275「T」:非法使用這種類型作爲表達一個C++模板功能問題

標題是:

#include <vector> 
#include <array> 
#include <iostream> 

using t_double = double; 
template<typename T> 
using t_vec = std::vector<T>; 

class SuperPixel2 
{ 
    t_vec<double> distances; 

    template<typename T> 
    void Set(t_vec<T> &v, 
    size_t i, 
    size_t j, 
    const T &val); 

    void something(); 
} 

而且cpp文件:

#include "SuperPixel2.h" 
template<typename T> 
void SuperPixel2::Set(t_vec<T> &v, 
    size_t i, 
    size_t j, 
    const T &val) 
{ 
    v[i * cols + j] = T; 
} 

void SuperPixel2::something() 
{ 
    t_double d; 
    //.. 
    Set(distances, k, l, (t_double)d); 
    //.. 
} 

回答

1

嗯,這行看起來非常奇怪:

v[i * cols + j] = T; 

我認爲它的意思爲b E:

v[i * cols + j] = val; 

作爲一個側面說明(也許這將更有意義,看着全班)的distances類型是已知的(雙打的載體),所以這是我不清楚爲什麼Set方法需要成爲模板成員。

2

除了sudo make install說的什麼之外,通常不能在頭文件中聲明模板並將實現寫入cpp文件。請參閱here以解答您的問題。