首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模板类中的结构

模板类中的结构
EN

Stack Overflow用户
提问于 2009-09-30 10:40:27
回答 2查看 485关注 0票数 0

示例代码如下:

代码语言:javascript
运行
复制
struct TEMP
{
    int j;
    TEMP()
    {
     j = 0;
    }
};

template<typename T>
class classA
{
    struct strA
    {
        long i;
        strA():i(0) {}
    };
    static strA obj_str;
    classA();
};

template<typename T>
classA<T>::classA()
{}

template<typename T> 
classA<TEMP>::strA classA<TEMP>::obj_str;

int main()
{
   return 0;
}

在编译此代码时,我会得到以下错误:

test1.cpp:32:内部编译器错误:在import_export_decl中,at cp/decl2.c:1970请提交一个完整的错误报告,并在适当情况下提供预处理的源代码。有关说明,请参见http://bugzilla.redhat.com/bugzilla>。预处理源存储在/tmp/ccUGE0GW.out文件中,请将其附加到您的bugreport中。

我正在x86_64-redhat-linux机器上构建这个代码,gcc版本是gcc版本4.1.2 20070626 (RedHat4.1.2-14)

请注意,此代码已经在i 386-redhat-linux机器上用gcc版本3.4.5 20051201 (RedHat3.4.5-2)构建。

不知道为什么这不能和gcc一起建4.1.2。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-30 10:47:07

在任何情况下,您的代码在下面的声明中都没有多大意义。

代码语言:javascript
运行
复制
template<typename T> 
classA<TEMP>::strA classA<TEMP>::obj_str;

因为声明中没有使用T参数。我想你要么想写一件事:

代码语言:javascript
运行
复制
// definition of static member of template
template<typename T> 
typename classA<T>::strA classA<T>::obj_str;

// ... or declaration of static member specialization for `T=TEMP` of template
template<> 
classA<TEMP>::strA classA<TEMP>::obj_str;

我怀疑这是第一次。对于编译器崩溃,在任何情况下都不应该发生这种情况:)

编辑:这个bug至少在4.4.1中已经修复了--我认为不再需要报告了。

票数 3
EN

Stack Overflow用户

发布于 2009-09-30 10:46:07

我会跟踪错误报告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1497325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档