gpt4 book ai didi

c++ - 未定义对 ClassName::ClassName 的引用

转载 作者:太空宇宙 更新时间:2023-11-04 15:53:34 27 4
gpt4 key购买 nike

我正在使用 Code::Blocks 构建我的项目,其中包含三个文件:main.cppTimeSeries.cppTimeSeries.hTimeSeries.hTimeSeries 类提供如下声明:

template<class XType, class YType> class TimeSeries {
public:
TimeSeries(void);
~TimeSeries(void);
};

然后 TimeSeries.cpp 包含: #include "TimeSeries.h"

template<class XType, class YType>
TimeSeries<XType, YType>::TimeSeries(void) {
}

template<class XType, class YType>
TimeSeries<XType, YType>::~TimeSeries(void) {
}

最后,main.cpp 包含

#include "TimeSeries.h"
typedef TimeSeries<float, float> FTimeSeries;

int main(int argc, char** argv) {
FTimeSeries input_data;
return 0;
}

使用 C::B 构建时,出现以下错误:

undefined reference to `TimeSeries<float, float>::TimeSeries()'

我能做什么?

谢谢,
CFP.

最佳答案

基本上所有模板化代码都应该在头文件中定义,否则将不会被构建,因为在编译单元中没有使用它。

每个cpp文件被编译为一个单独的单元,因此不编译构造函数和析构函数。编译器在编译 TimeSeries.cpp 时无法知道您将在 main.cpp 中使用哪种类型的模板参数。

关于c++ - 未定义对 ClassName::ClassName 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744852/

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