Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 A C++;模板函数问题_C++11_Templates - Fatal编程技术网

C++11 A C++;模板函数问题

C++11 A C++;模板函数问题,c++11,templates,C++11,Templates,类中的模板函数有问题。当我在something()函数中调用“Set”时,VS显示: 错误C2275“T”:非法使用此类型作为表达式 标题为: #include <vector> #include <array> #include <iostream> using t_double = double; template<typename T> using t_vec = std::vector<T>; class SuperPixe

类中的模板函数有问题。当我在something()函数中调用“Set”时,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();
}
#包括
#包括
#包括
使用t_double=double;
模板
使用t_vec=std::vector;
类超像素2
{
t_-vec距离;
模板
无效集(t_vec&v,
尺码(i),
尺寸j,
常数T&val);
使某物无效;
}
和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);
    //..
}
#包括“superpix 2.h”
模板
void superpix 2::Set(t_vec&v,
尺码(i),
尺寸j,
常数(T&val)
{
v[i*cols+j]=T;
}
void superpix 2::something()
{
双d;
//..
设置(距离,k,l,(t_-double)d);
//..
}

这条线看起来很奇怪:

v[i * cols + j] = T;
我想这应该是:

v[i * cols + j] = val;

作为旁注(也许这对于整个类来说更有意义),
距离的类型是已知的(一个双精度向量),因此我不清楚为什么
方法需要是模板成员。

这行看起来很奇怪:

v[i * cols + j] = T;
我想这应该是:

v[i * cols + j] = val;

作为旁注(也许这对于整个类来说更有意义),
距离的类型是已知的(一个双精度向量),因此我不清楚为什么
方法需要是模板成员。

除了sudo make install所说的,通常不能在头文件中声明模板,而在cpp文件中写入实现。有关问题的答案,请参阅。

除了sudo make install所说的,您通常不能在头文件中声明模板,而在cpp文件中写入实现。看看你的问题的答案