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++ X不是类模板_C++_Templates - Fatal编程技术网

C++ X不是类模板

C++ X不是类模板,c++,templates,C++,Templates,我试图编译下面的代码,我得到的错误如下 错误:“MD5Sum”不是类模板 模板结构MD5Sum“ 模板结构MD5Sum { 静态常量char*value(){return MD5Sum::value();} 静态常量char*值(const::cv_bridge::CvImage&{return value();} 静态常数uint64\u t静态值1=MD5Sum::静态值1; 静态常数64\u t静态值2=MD5Sum::静态值2; //如果sensor_msgs/Image的定义发生更改,

我试图编译下面的代码,我得到的错误如下

错误:“MD5Sum”不是类模板
模板结构MD5Sum“

模板结构MD5Sum
{
静态常量char*value(){return MD5Sum::value();}
静态常量char*值(const::cv_bridge::CvImage&{return value();}
静态常数uint64\u t静态值1=MD5Sum::静态值1;
静态常数64\u t静态值2=MD5Sum::静态值2;
//如果sensor_msgs/Image的定义发生更改,我们将在此处得到一个编译错误。
ROS_STATIC_ASSERT(MD5Sum::STATIC_value1==0x060021388200f6f0ULL);
ROS_STATIC_ASSERT(MD5Sum::STATIC_value2==0xf447d0fcd9c64743ULL);
};

这似乎是模板专门化。这是否意味着在进行模板专门化之前,模板类应该首先出现。

类模板
MD5Sum
需要在其任何专门化之前声明。 您要么需要包含声明模板的文件,要么自己声明

您可以使用空定义(如果您只想调用完全专用的版本)或您选择的通用实现:

// add this before your specialization
template <class T> struct MD5Sum; // empty declaration

// or your default implementation
template <class T> struct MD5Sum {
   ...
};
//在专门化之前添加此项
模板结构MD5Sum;//空声明
//或者您的默认实现
模板结构MD5Sum{
...
};

“这是否意味着模板类应该首先出现,然后再进行模板专门化?”当然……所以您已经回答了自己的问题。我在上面添加了以下代码,但仍然是相同的问题:`template struct MD5Sum{static const char*value(){return MD5Sum::value();}static const char*value(T&){return value();}static const uint64_t static_value1;static const uint64_t static_value2;},@Ghansham定义模板的正确语法应该是
template struct MD5Sum{…
@Ghansham,这仍然是一个模板专门化-将
放在结构名称之后以获得一个非专门化的模板。。。
// add this before your specialization
template <class T> struct MD5Sum; // empty declaration

// or your default implementation
template <class T> struct MD5Sum {
   ...
};