模板,静态变量和诸如此类的冲突声明

时间:2011-09-14 08:49:34

标签: c++ templates visual-c++ static g++

我有这个源代码,我想在g ++ 4.4.5下编译。此代码在Visual C ++ 2008中正确编译,但不适用于g ++。

#include <iostream>

template<typename T, int MAXSIZE>
class ThreadSafePool
{
    typedef T theType;
};


template<int value>
class CNetPacket
{
    public:
            static const int s_max_pool_cnt=30;
    private:
            static ThreadSafePool<CNetPacket<value>, CNetPacket<value>::s_max_pool_cnt> s_packet_pool;
};

template<int value>
ThreadSafePool<CNetPacket<value>, CNetPacket<value>::s_max_pool_cnt> CNetPacket<value>::s_packet_pool;


int main()
{
    int temp = CNetPacket<300>::s_max_pool_cnt;
}

g ++提供了此错误消息:

test.cpp:21:错误:冲突声明ThreadSafePool,CNetPacket :: s_max_pool_cnt&gt; CNetPacket :: s_packet_pool

test.cpp:16:错误:CNetPacket :: s_packet_pool具有先前声明为ThreadSafePool,30&gt; CNetPacket :: s_packet_pool

test.cpp:21:错误:ThreadSafePool的声明,30&gt;类外的CNetPacket :: s_packet_pool不是定义

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

使用gcc 4.7 svn,gcc 4.6.1,gcc 4.5.3,gcc 4.3.4这对我来说很好,并且使用gcc 4.4.2

我认为这是编译错误。