Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板类的静态模板字段?_C++_Templates - Fatal编程技术网

C++ 模板类的静态模板字段?

C++ 模板类的静态模板字段?,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

我已将此代码从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
模板
类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上)似乎是问题的解决方案。非常感谢!