c++ - 模板类的静态模板字段?

标签 c++ templates

我有这段代码可以从 Windows 移植到 Linux。

template<class T, int Size> 
class CVector {
 /* ... */
};

template<int n, int m>
class CTestClass {
public:
 enum { Size = 1 << n };
private:
 static CVector<int, Size> a; // main.cpp:19
};

template<int n, int m>
CVector<int, CTestClass<n, m>::Size> CTestClass<n, m>::a; // main.cpp:24

它使用 VS2008 编译,但不使用 g++ 4.3.2。 我收到的错误是:

main.cpp:24: error: conflicting declaration ‘CVector CTestClass::alpha_to’

main.cpp:19: error: ‘CTestClass< n, m >::alpha_to’ has a previous declaration as ‘CVector< int, CTestClass< n, m >::Size > CTestClass< n, m >::alpha_to’

main.cpp:24: error: declaration of ‘CVector< int, CTestClass< n, m >::Size > CTestClass< n, m >::alpha_to’ outside of class is not definition

有人知道如何通过 g++ 使其可编译吗?

谢谢!

最佳答案

这适用于 gcc 3.4 和 4.3 以及 VC8:

template<class T, int Size> 
class CVector {
 /* ... */
};

template<int n, int m>
class CTestClass {
public:
    enum { Size = 1 << n };
    typedef CVector<int, Size> Vector;
private:
    static Vector a; 
};

template<int n, int m>
typename CTestClass<n,m>::Vector CTestClass<n,m>::a;

关于c++ - 模板类的静态模板字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1980642/

相关文章:

c++ - 打开 cv 程序崩溃说关于 "libstdc++-6.dll mingw"的错误

C++ - 在另一个类中实例化对象时调用默认构造函数以外的构造函数

c++ - 自动生成唯一的类型 ID,反之亦然

visual-studio - VS 模板不安装 Nuget 包

c++ - 从模板化容器类型中获取元素类型

java, System.loadlibrary ("someDLLFile") 获取未统计的链接错误

c++ - 为什么 std::map 使我的代码如此臃肿?

c++ - Erase——删除成语c++(无友元函数)

c++ - C++ 中类的成员函数的 pthread - 为什么不是模板?

c++ - C++ 编译器是否为每个具有相同模板参数集的模板类实例生成代码?