У меня есть этот исходный код, который я хочу скомпилировать в 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 вне класса не является определением
Любая помощь будет оценена. Спасибо.