C ++模板化函数问题

时间:2017-03-24 21:28:56

标签: c++11 templates

我在类中有一个Template函数的问题。当我打电话给#34; Set"在something()函数中,VS告诉我: 错误C2275' T':非法使用此类型作为表达式

标题是:

#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);
    //..
}

2 个答案:

答案 0 :(得分:2)

除了sudo make install之外,你通常不能在头文件中声明模板并在cpp文件中编写实现。请参阅here以获取问题的答案。

答案 1 :(得分:1)

这条线看起来很奇怪:

PATH=$HOME/.linuxbrew/bin:$PATH

我认为这意味着:

v[i * cols + j] = T;

作为旁注(也许这会更有意义地看整个班级),v[i * cols + j] = val; 的类型是已知的(双向量),所以我不清楚为什么{{1}方法需要是模板化成员。