c++ - 模板不在范围内

标签 c++ templates

在“char.h”中得到这个

#ifndef _CHAR_H_
#define _CHAR_H_

#include <stdio.h>

template <unsigned int TChar>



class Char
{
public:
 Char(){ *m_data=0; m_len=-1; }

private:
  char m_data[TChar+1];
 int m_len;
}; 

#endif

现在进行这个简单的测试:

#include "char.h"


void test(Char<TChar> &oo)
{
  //...
}


int main(int argc, char *argv[])
{
  Char<80> gg;

  return 0;
}

我得到了 gcc : TChar 未在该范围内声明!? 我不明白,声明在 .h 中 ??

谢谢...

最佳答案

模板类的完整实现必须在该模板类的 header 中(否则您可能会遇到链接器错误)。 编译器需要访问整个模板定义(而不仅仅是签名)以便为模板的每个实例化生成代码,因此您需要将函数的定义移动到您的头文件中。 (包容模型)。

您已正确放置定义。 :-)

然而在void test(Char<TChar> &oo)编译器不知道什么TChar是。尝试添加 template <unsigned int TChar>高于定义

template <unsigned int TChar>
void test(Char<TChar> &oo){
  // ... stuff
}

关于c++ - 模板不在范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706790/

相关文章:

javascript - 如何创建一个模板,用于在没有对应关系的情况下随机化图片和报价?

c++ - 遵循 C++/OpenGL 教程(导入图像)的问题

c++ - 为什么我自定义的 `::swap` 函数没有被调用?

c++ - 检测原始 pcm 数据中的声级

C++11:std::get<> 等价于 n 维数组

python - AppEngine 和 Django : including a template file

c++ - 文件读取返回损坏的文件结尾

c++ - 循环 cv::Mat 对象时 cv::Exception 在内存位置

c++ - 调用模板类的构造函数

c++ - 如何删除模板?