C++ 使用;奇怪的重复模板模式“;在多文件程序中
我是一个非常新手(C++程序员),刚刚发现了用于记录属于特定类的对象数量的CRTP 我是这样实现的:C++ 使用;奇怪的重复模板模式“;在多文件程序中,c++,templates,crtp,C++,Templates,Crtp,我是一个非常新手(C++程序员),刚刚发现了用于记录属于特定类的对象数量的CRTP 我是这样实现的: template <typename T> struct Counter { Counter(); virtual ~Counter(); static int count; }; template <typename T> Counter<T>::Counter() { ++count; } template <t
template <typename T>
struct Counter
{
Counter();
virtual ~Counter();
static int count;
};
template <typename T> Counter<T>::Counter()
{
++count;
}
template <typename T> Counter<T>::~Counter()
{
--count;
}
template <typename T> int Counter<T>::count(0);
模板
结构计数器
{
计数器();
虚拟计数器();
静态整数计数;
};
模板计数器::计数器()
{
++计数;
}
模板计数器::~计数器()
{
--计数;
}
模板int计数器::计数(0);
这似乎有效。但是,它似乎不喜欢在单独的头文件中继承它,我在头文件中声明:
class Infector : public Counter<Infector>
{
public:
Infector();
virtual ~Infector();
virtual void infect(Infectee target);
virtual void replicate() = 0;
virtual void transmit() = 0;
protected:
private:
};
类感染者:公共计数器
{
公众:
感染者();
虚拟感染者();
虚拟空洞感染(感染对象目标);
虚拟空复制()=0;
虚空传输()=0;
受保护的:
私人:
};
没有继承,一切都可以正常编译,所以我相当肯定它看不到模板的声明和定义。有没有人对我可能出了什么问题以及我能做些什么有什么建议?我应该在我的Infector定义之前使用extern来让编译器知道计数器模板之类的东西吗
干杯
Kyle我注意到您特别提到了声明和定义。
你们有单独的档案吗
如果是这样,则模板仅为标题生物。您需要将定义放在头文件中。您是否记得包含定义计数器的文件(即#include“Counter.h”)?您必须发布看到的错误消息。我们不是通灵者。还有,你在用什么编译器?CRTP可能会严重影响一些较旧的编译器。如果您仍在使用GCC 3.4(MinGW只是最近才在4.4版中使用GCC 4),您可能会因此而遇到问题。我可以混合版本,但我想我在编译器中有无限循环,在MingWGCC3.4中做类似的模板欺骗。5@sbi,很抱歉没有包括具体的错误消息,它们基本上是按照“在token'之前预期的关键字模板听起来不适合Chris写的。啊,太棒了。谢谢。我将把模板移动到一个头文件,我把它作为一个链接的对象文件,我想这不足以让代码的其余部分知道它。干杯