ファイル SomeClass.h 内
#ifndef SOME_CLASS_H_
#define SOME_CLASS_H_
#include <iostream>
using std::cout;
using std::endl;
template <class T, class P>
class SomeClass
{
public:
SomeClass();
void SomeMethod();
protected:
typedef unsigned int heapPosition;
heapPosition someVariable;
private:
static const heapPosition NULLPOSITION;
};
template <class T, class P>
const typename SomeClass<T,P>::heapPosition SomeClass<T,P>::NULLPOSITION = -1;
template <class T, class P>
SomeClass<T,P>::SomeClass(){}
template <class T, class P>
void SomeClass<T,P>::SomeMethod()
{
someVariable=NULLPOSITION;
cout<<"NULLPOSITION:"<<NULLPOSITION<<endl;
}
#endif
ファイル内 main.cpp
#include <cstdlib>
#include <iostream>
#include "SomeClass.h"
using namespace std;
int main(int argc, char *argv[])
{
SomeClass<int,int> someClass;
someClass.SomeMethod();
system("PAUSE");
return EXIT_SUCCESS;
}
基本的に、 static const member を持つテンプレート化されたクラスがあります(NULLPOSITION)
。クラス定義の外側とインラインの両方で、クラスの初期化を試みました
static const heapPosition NULLPOSITION=-1;
メンバーを宣言するとき。
ただし、どちらの場合も、SomeMethod
その値を参照すると、ランダムな値になります。つまり、初期化されていません。
私はこの種のことを何度も行ってきましたが、この種の問題は一度もありませんでした。
私は何を間違っていますか?
誰か助けてくれませんか?どうぞよろしくお願いいたします。
ありがとう、ジェラルド・セレンテ