我有一个A类,其中包含模板成员函数AFunc。为了将定义与声明分开,我在A中一起声明了AFuncA.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/

10-10 21:19