2017-03-24 51 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以解答您的问题。