C++ 模板类的静态模板字段?
我已将此代码从windows移植到linuxC++ 模板类的静态模板字段?,c++,templates,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&l
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
模板
类CVector{
/* ... */
};
模板
类别CTestClass{
公众:
enum{Size=1如果将a的声明取出类外,它将使用g++v.3.4.4在cygwin上编译
顺便问一下,为什么不使用std::vector
而不是CVector
?实际上,CTestClass::a取决于模板参数“n”。请仔细查看代码
为什么不使用std::vector而不是CVector
这不是我的代码,但假设有一些原因。事实上,这并不重要-代码也不会使用std::vector
编译。在CTestClass中,大小是一个枚举而不是一个int(根据标准,它依赖于实现,枚举不必是整数)。尝试使用静态常量int Size=…。我认为问题在于枚举
这适用于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;
模板
类CVector{
/* ... */
};
模板
类别CTestClass{
公众:
枚举{Size=1不,我不明白为什么他甚至不需要初始化静态成员。你能解释一下吗?他没有初始化它,因为他没有给它任何值。他只是声明它。实际上CTestClass::a依赖于模板参数“n”。仔细看代码。为什么不使用std::vector而不是CVector?不是不是我的代码,但假设有一些原因。事实上,这并不重要-代码也不会用std::vector编译。如何删除答案?我已经发布了文本来回答而不是评论,现在不会删除答案。你是对的。抱歉,我错过了。但是试着去掉第24行的声明。我刚刚尝试过,它用g编译++在cygwin上。在这种情况下,这段代码的功能会被保存吗?是的,在编译时不会有任何问题(如果他删除那一行)但是他的程序不会链接。我想这是另一个MSVC++扩展,虽然我不确定。请有人给它一些说明。我有一个类似的想法,但我将大小改为常量int,仍然得到了与asker相同的错误(至少在g++4.1.2上)似乎是问题的解决方案。非常感谢!