在 tpp 文件中声明模板成员函数
Declaring a template member function in a tpp file
我有一个 class A
,其中包含一个模板成员函数 AFunc
。为了将定义与声明分开,我在 A.h
中一起声明了 A
和 AFunc
。然后我在 A.tpp
中定义成员函数 AFunc
并在文件 A.h
.
底部定义 #include "A.tpp"
对我来说,这一切看起来都像是有效的 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.tpp
中包含A.h
,我们想在A.h
中包含A.tpp
。这种包含是周期性的。
// 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 经验。
我有一个 class A
,其中包含一个模板成员函数 AFunc
。为了将定义与声明分开,我在 A.h
中一起声明了 A
和 AFunc
。然后我在 A.tpp
中定义成员函数 AFunc
并在文件 A.h
.
#include "A.tpp"
对我来说,这一切看起来都像是有效的 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.tpp
中包含A.h
,我们想在A.h
中包含A.tpp
。这种包含是周期性的。
// 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 经验。