在文件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;
}
基本上我有一个带有静态const成员(NULLPOSITION)
的模板化类。
我尝试过类的定义和内联的inizialitazion
如在
static const heapPosition NULLPOSITION=-1;
宣布成员时。
然而,在这两种情况下,当我在SomeMethod
中引用时,它的值是一些随机值 - 即它尚未初始化。
我很多次都做过这种事情,而且我从未遇到过这种类型的问题。
我做错了什么?
有人可以帮帮我吗?非常感谢你的时间。
谢谢, 杰拉德·塞伦特
答案 0 :(得分:2)
问题是您要将NULLPOSITION
声明为unsigned int
并将其分配为-1
答案 1 :(得分:2)
你确定它是随机值吗?您已将NULLPOSITION
声明为unsigned
,因此将-1
分配将导致cout.operator<<
(在unsigned
重载中调用)打印一些较大的值({{1对于32位4294967295
)
答案 2 :(得分:1)
你需要:
template <class T, class P>
const typename SomeClass<T, P>::heapPosition SomeClass<T, P>::NULLPOSITION = -1;
或者只是:
template <class T, class P>
const unsigned int SomeClass<T, P>::NULLPOSITION = -1;
(这需要进入头文件。)
但是,更好的方法是将初始化程序添加到类定义中:
private:
static const heapPosition NULLPOSITION = -1;
这样你就可以在没有定义变量的情况下完全逃脱(只要它没有使用过多的东西。)