我有要在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则失败
我认为这是一个编译器错误。