gpt4 book ai didi

c++ - 在多文件程序中使用 "curiously recurring template pattern"

转载 作者:行者123 更新时间:2023-11-28 03:56:52 25 4
gpt4 key购买 nike

我是一个相当新手 (C++) 的程序员,并且刚刚发现了 CRTP 来保持属于特定类的对象的计数。

我是这样实现的:

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);

这似乎有效。但是,它似乎不喜欢在单独的头文件中继承它,我在其中声明:

class Infector : public Counter<Infector>
{
public:
Infector();
virtual ~Infector();

virtual void infect(Infectee target);
virtual void replicate() = 0;
virtual void transmit() = 0;

protected:
private:
};

没有继承,一切都编译得很好,所以我很确定它看不到模板的声明和定义。有人对我可能出错的地方以及我能做些什么有任何建议吗?我是否应该在 Infector 定义之前使用 extern 来让编译器知道 Counter 模板或类似的东西?

干杯,

凯尔

最佳答案

我注意到你特别提到了声明和定义。
您是否将它们放在单独的文件中?

如果是这样,模板就是只有标题的生物。您需要将定义放在头文件中。

关于c++ - 在多文件程序中使用 "curiously recurring template pattern",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3216309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com