在“ 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?
谢谢...
最佳答案
模板类的完整实现必须在该模板类的标头中(否则您可能会收到链接器错误)。
为了为模板的每个实例生成代码,编译器需要访问整个模板定义(而不仅仅是签名),因此您需要将函数的定义移至标头。 (包含模型)。
您已经正确放置了定义。 :-)
但是,在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/