在“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/