我有这个源代码,我想在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不是定义
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
使用gcc 4.7 svn,gcc 4.6.1,gcc 4.5.3,gcc 4.3.4这对我来说很好,并且使用gcc 4.4.2
我认为这是编译错误。