模板类中的结构

时间:2009-09-30 10:40:27

标签: c++

示例代码如下:

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中,在cp / decl2.c:1970   请提交完整的错误报告,   如果合适,使用预处理的来源。   见http://bugzilla.redhat.com/bugzilla>作为指示。   存储在/tmp/ccUGE0GW.out文件中的预处理源,请将其附加到您的bug报告中。

我在x86_64-redhat-linux机器上构建此代码,gcc版本是gcc版本4.1.2 20070626(Red Hat 4.1.2-14)

请注意,此代码已在i386-redhat-linux机器上使用gcc版本3.4.5 20051201(Red Hat 3.4.5-2)构建。

知道为什么这不能用gcc 4.1.2构建。

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

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

因为声明中没有使用T参数。我想你要么写下列内容之一:

// 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;

我怀疑这是第一个。对于编译器崩溃 - 在任何情况下都肯定不会发生:)


编辑:该错误至少已在4.4.1中得到修复 - 我认为不再需要报告了。

答案 1 :(得分:0)

我会关注错误报告。