如何解决VC ++模板编译器错误C2244:无法将函数定义与现有声明匹配
| 我在使用Visual Studio 2010时遇到了编译器错误,并将其简化为以下代码:template <int i> struct A
{
typedef int T;
};
template<int i>
struct B
{
static const int i = i; // <-- this seems to cause the problem
typename A<i>::T F();
};
template<int i>
typename A<i>::T B<i>::F() { return B<i>::i; }
此代码产生此错误:
repro.cpp(15): error C2244: \'B<i>::F\' : unable to match function definition to an existing declaration
repro.cpp(12) : see declaration of \'B<i>::F\'
definition
\'A<i>::T B<i>::F(void)\'
existing declarations
\'A<i>::T B<i>::F(void)\'
如果删除了结构“ 3”中“ 2”的声明,编译器错误就会消失。我相信这是因为返回类型F
的模板参数绑定到B
内的静态成员i
而不是B
\的模板参数。为什么当i
的值相同时,F
\'differ \'的返回类型呢?这是一个错误吗?
我还应该提到,如果将该函数声明为内联,则错误消失了。
解决方法
问题是您在同一范围内两次声明了相同的名称。如果重命名静态const int i或模板参数,它应该可以工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。