我有一个A
类,其中包含模板成员函数AFunc
。为了将定义与声明分开,我在A
中一起声明了AFunc
和A.h
。然后,我在文件AFunc
的底部A.tpp
和#include "A.tpp"
中定义成员函数A.h
。
在我看来,这一切都像有效的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
}
解决此问题的典型解决方案是什么? 最佳答案
您是要给编译器提供文件“A.tpp”还是包含“A.h”的另一个C++源文件?您以这种方式进行结构化,我认为后者会给您您所期望的行为。抱歉,我没有太多VS经验。
关于c++ - 在tpp文件中声明模板成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64993450/