C++ 在不同的标题中排列与模板相关的代码

C++ 在不同的标题中排列与模板相关的代码,c++,templates,header,implementation,C++,Templates,Header,Implementation,只要我将下面的代码全部保存在“main.cpp”文件中,它就可以工作 若要将常数用作模板参数,其值必须在当前转换单位中可用。将Travel::Air的定义移动到其他源文件时,编译器在main中不再可以使用它的值 由于它是一个整型常量,您可以在类内的声明中声明该值: class Travel { public: static const travel_t AIR = -2; static const travel_t WATER = -1; static const tra

只要我将下面的代码全部保存在“main.cpp”文件中,它就可以工作


若要将常数用作模板参数,其值必须在当前转换单位中可用。将
Travel::Air
的定义移动到其他源文件时,编译器在
main
中不再可以使用它的值

由于它是一个整型常量,您可以在类内的声明中声明该值:

class Travel
{
public:
    static const travel_t AIR = -2;
    static const travel_t WATER = -1;
    static const travel_t LAND = 0;
};

现在,这些值可以在包含此类定义的任何翻译单元中用作模板参数。

太好了!我想我以前试过,但编译器也不喜欢。但我显然错了。我认为我缺乏经验。非常感谢您快速而彻底的回答。我现在很清楚了。这种问题再也不会困扰我了。:-)
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'|
class Travel
{
public:
    static const travel_t AIR = -2;
    static const travel_t WATER = -1;
    static const travel_t LAND = 0;
};