0
只要我将它全部保存在“main.cpp”文件中,下面的代码就可以工作。在不同的头文件中排列模板相关的代码
//#include "Travel.h"
//#include "Obj.h"
// "Travel.h"
typedef int travel_t;
class Travel
{
public:
static const travel_t AIR;
static const travel_t WATER;
static const travel_t LAND;
};
// "Travel.cpp"
// #ifndef TRAVEL_H
// #define TRAVEL_H
//
// #include "Travel.h"
const travel_t Travel::AIR = -2;
const travel_t Travel::WATER = -1;
const travel_t Travel::LAND = 0;
// #endif //TRAVEL_H
// "Obj.h"
// #ifndef OBJ_H
// #define OBJ_H
//
//#include "Travel.h"
template<typename T, travel_t travel>
class Obj
{
public:
void foo(){};
};
// #endif //OBJ_H
// "main.cpp"
int main()
{
Obj<int, Travel::AIR> objAirTravel;
objAirTravel.foo();
return 0;
}
但是,只要我感动的代码不同的页眉和实现文件所示,它不编译任何更多。 ?:-(我该如何解决这个问题背后是什么问题/规则这是我得到(使用GCC)编译器错误:
main.cpp|45|error: 'Travel::AIR' is not a valid template argument for type 'int' because it is a non-constant expression|
main.cpp|45|error: invalid type in declaration before ';' token|
main.cpp|47|error: request for member 'foo' in 'objAirTravel', which is of non-class type 'int'|
太棒了!我以为我曾尝试过,编译器也不喜欢它。但我最明显是错的。我想说,我缺乏经验。快速而彻底的答复非常感谢。我现在很清楚。这类问题再也不会让我感到困扰。 :-) – AudioDroid 2012-04-13 15:26:39