【问题标题】:Function template instantiation failing函数模板实例化失败
【发布时间】:2012-06-29 10:15:37
【问题描述】:

我一直在尝试强制实例化以下内容:

//A.h
namespace A {
    template <typename T>
    bool foo (B::C<T>, D);
} 

template bool A::foo<int> (B::C<int>, D);

//1.cpp 

namespace A {
template <typename T> 
bool foo (B::C<T>, D) {
    return false;
}
}




// 2.cpp
#include "A.h"

using namespace A;

void foo()
{///
    ...
    B::C<int> Alpha;
    foo(Alpha, Beta);
}

我收到的错误消息是:

C2785:不同的返回类型

C4667:未定义与强制实例化匹配的函数模板

此实例化是否存在明显错误,因为错误消息似乎不相关。

【问题讨论】:

  • 首先需要在一个文件中定义模板函数。
  • 您的代码不完整 - “不同的返回类型”错误表明“B::C”模板类可能存在问题。
  • 我假设代码的错误部分在实际实例化中。但是您可能是对的,错误不在这段代码中,因为我重新创建并成功编译了一个类似的示例。

标签: c++ function templates instantiation


【解决方案1】:

这是因为模板在编​​译时扩展,所以编译器必须知道模板化函数的定义和实现,所以你不能在一个文件中定义函数并在另一个文件中实现它

【讨论】:

  • 在这种情况下,模板函数会被强制实例化,因此它应该可以正常工作。
  • 你不能在没有看到函数定义的情况下强制实例化。也许这里有几个问题?
  • @BoPersson - 原始问题中给出的代码绝对不完整 - B::C 未在任何地方定义,并且 1.cpp 不包含 Ah,因此也无法编译。
猜你喜欢
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多