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

10-11 21:28