GCC 错误:'X'不是模板?
GCC bug: 'X' is not a template?
最近,我在Codepad上测试了一些模板代码。虽然代码是正确的,但 GCC 给了我一个非常奇怪的错误。我也在 Ideone 上测试了它:
测试代码:
template<int num>
struct count;
template<>
struct count<-1>
{
};
int main()
{
return 0;
}
以下是Codepad (GCC 4.1.2)和Ideone(GCC 4.3.4)上的结果:
Line 5: error: 'count' is not a template
而 GCC 4.3.4 正常编译没有错误。这真的是一个编译器错误,还是我的代码不正确(并且由于扩展而编译?
如果我尝试
template<int num>
struct count;
template<>
struct count<-1>
{
};
int main()
{
return 0;
}
使用 g++ 4.1.2,我没有问题。 如果我尝试
#include <algorithm>
using namespace std;
template<int num>
struct count;
template<>
struct count<-1>
{
};
int main()
{
return 0;
}
使用 g++ -我得到的致命错误
count.cpp:8: error: 'count' is not a template
compilation terminated due to -Wfatal-errors.
所以我的猜测是 Codepad 正在强制你触发错误的序言。
看起来Codepad默默地添加了一堆#include
s和一个using namespace std;
,无论您是否愿意它们:请参阅此示例,该示例不应自行编译:
int main()
{
cout << "Hello" << endl;
}
Output: Hello
这可能会破坏像您这样的代码,该代码在全局命名空间中定义了一个名称(count
),该名称也存在于std
命名空间中。
此错误最可能的原因是标识符名称之间的冲突。
有时,一个人从一堂课开始。该类将在一段时间后扩展到模板中。当此时仍有类原型时(例如,在不同的头文件中),编译器将发出此错误。
(虽然这不适用于这里的具体情况,但这个答案可能会帮助在寻求帮助时遇到此页面的其他人。
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 初始化迭代器错误 C++ 在 GCC 编译器中
- GCC:随机构建导致执行期间分段错误
- 错误:使用 clang 没有可行的重载,使用 GCC 编译
- "未定义对'WinMain@16'的引用"gcc 编辑器中的错误
- 与NVIDIA链接的错误GCC版本
- std::seed_seq编译错误(GCC错误?)
- 使用 lambda 的错误 gcc 行为
- std :: sort函数上的编译器错误(GCC 4.4)
- C++ 编译错误(gcc 4.7)
- 套接字错误 gcc 无法在 WinSock2.h 中获取函数
- Linux编译错误-GCC 4.3.4-模板参数列表太少
- 如何解决在Zero C Ice编译中的upCast错误?- Gcc - 4.7使用clang编译
- GCC 6.1.0 分段错误 - GCC 错误
- std::bind 编译器错误 gcc
- VS2013过载错误(GCC不会发生)
- 使用Python.h编译错误gcc