【发布时间】:2021-03-07 15:30:03
【问题描述】:
我有一个类A,它包含一个模板成员函数AFunc。为了将定义与声明分开,我将A 和AFunc 一起声明在A.h 中。然后,我在文件A.h 底部的A.tpp 和#include "A.tpp" 中定义成员函数AFunc。
对我来说,这一切看起来都像是有效的 C++。但是,Visual Studio 编译器会抛出错误:
A.tpp(8,139): error C2244: 'A::AFunc': unable to match function definition to an existing declaration
明确的解决方案是在定义AFunc 之前在A.tpp 文件的顶部包含AFunc 的声明。该声明在A.h 中,因此我们希望将A.h 包含在A.tpp 中,并且我们希望将A.tpp 包含在A.h 中。这种包含是周期性的。
// A.h
class A{
template <class T>
void AFunc();
};
#include "A.tpp"
// A.tpp
template <class T>
void A::AFunc(){
// definition
}
处理这个问题的典型解决方案是什么?
【问题讨论】:
-
@cigien 我的错。 A::AFunc 现在是一个模板函数。
-
文件结构没问题。当我将所有这些代码放在一个文件中时(这不会影响代码的含义),我收到了类似的错误消息,因为我在定义中拼错了
AFunc。
标签: c++ templates compiler-errors include member-functions