编译器错误 C2989
来源:互联网 发布:java中跨行跨列 编辑:程序博客网 时间:2024/06/06 09:17
前几天开发遇到非类模板已经声明为类模板,,微软知识库中有说明
但是还有一种情况,微软没提到,就是 当模板函数返回类型为enum时候
下面是微软的说明
编译器版本 Visual Studio 2013
“class” : 类类型已声明为非类类型
类泛型或模板重定义非模板或非泛型类。检查头文件中是否有冲突。
如果您在使用类模板部分专用化,请参见知识库文章 Q240866。
下面的示例生成 C2989:
// C2989.cpp// compile with: /cclass C{};template <class T>class C{}; // C2989class C2{};
使用泛型时也可能发生 C2989:
// C2989b.cpp// compile with: /clr /cref class GC1;generic <typename T> ref class GC1; // C2989template <typename T> ref class GC2;generic <typename T> ref class GC2; // C2989generic <typename T> ref class GCb;template <typename T> ref class GC2;generic <typename T> ref class GCc;
来源: https://msdn.microsoft.com/zh-cn/library/b25sbd9x.aspx
模板函数返回值为enum类型
下面的示例生成C2989
// compile with: /c// enum.cppenum enunm_type{MAT_INT8 = 1;MAT_INT16 = 2;MAT_INT32 = 3;//....}template<typename Dtype> enmu enunm_type fun() // C2989{//....return MAT_INT8;}
原因是编译器把enunm_type当成模板了。
解决方法
把enum关键字删掉。
个人怀疑又是编译器的原因。GCC编译器应该能认出enum而不是template,没做验证,不过VS编译器经常干这种事……
0 0
- 编译器错误 C2989
- 编译器错误:CS0426
- 内存条与编译器错误
- VC6编译器错误汇总
- VC 编译器错误大全
- 编译器错误 CS0445
- 编译器错误消息: CS0433
- 编译器错误 C2511
- Vs2005编译器错误
- java 编译器版本错误
- ActionScript 3.0 编译器错误
- 编译器错误消息: CS0016
- 编译器错误 error CS0120
- 编译器错误 C2894
- c++ 编译器 错误解决方法
- Flex编译器错误
- 编译器错误 C2662
- 编译器错误 C2148
- logstash 字段类型转换后 需要刷新
- Android 自定义View 点击可旋转的饼状图
- 剑指offer【11】反转链表
- js的组合继承
- C++中的算术类型
- 编译器错误 C2989
- Matlab从指定行读取文本文件(textscan)
- Vert.x 核心模块 特性介绍(一)
- 常用sql语句
- VK Cup 2016 - Qualification Round 2 C. Road Improvement dfs
- 最大奇约数
- Vi/Vim查找替换使用方法
- 史上最全的Java&Android面试题搜集整理
- 计算π/2=2/1*2/3*4/3*4/5*6/5*6/7.......