我有要在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> CNetPacket::s_packet_pool

test.cpp:16:错误:CNetPacket::s_packet_pool以前有一个声明为ThreadSafePool,30> CNetPacket::s_packet_pool

test.cpp:21:错误:ThreadSafePool的声明,30>类外部的CNetPacket::s_packet_pool undefined

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

最佳答案

这对于gcc 4.7 svn,gcc 4.6.1,gcc 4.5.3,gcc 4.3.4编译起来对我来说很好,而对gcc 4.4.2则失败

我认为这是一个编译器错误。

10-04 12:57