【问题标题】:Declaring a template member function in a tpp file在 tpp 文件中声明模板成员函数
【发布时间】:2021-03-07 15:30:03
【问题描述】:

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


【解决方案1】:

您是向编译器提供文件“A.tpp”还是另一个包含“A.h”的 C++ 源文件?你有这种结构的方式,我认为后者会给你你期望的行为。抱歉,我没有太多VS经验。

【讨论】:

  • 我正在使用 Visual Studio 的“构建”进行编译。我不确定如何阻止 Visual Studio 尝试编译我的 TPP 文件,但我相信您是正确的,这是导致错误的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多