我在类中有一个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);
//..
}
答案 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}方法需要是模板化成员。