模板类构造函数在第二个模板中有一个参数抛出错误"常量"

时间:2015-05-22 13:23:54

标签: c++

我的班级模板有问题。

template <class T>
class test {
private:
    T a;
public:
    test (T _a){
        a = _a;
    }
    test (){}
};

template <class T>
class test2 {
public:
    test<double> first(10.2);
//                     ^ error C2059: syntax error : 'constant'

    test<T> second;
    test<T> third;
    test2(){}

};

main()
{
    test2<int> object;
    return 0;
}

为什么我会收到上面评论中显示的编译器错误?

2 个答案:

答案 0 :(得分:3)

非静态数据成员初始值设定项需要使用大括号或等号。括号不是一个选项,可能是因为数据成员不会发生整个Most Vexing Parse惨败。将其更改为以下之一:

test<double> first = 10.2; //option 1 (doesn't work with explicit constructor)
test<double> first{10.2}; //option 2

答案 1 :(得分:0)

 test<double> first(10.2);

这是语法错误。

它看起来像是一个带有常量值的函数声明来代替参数类型(非法),或者是一个用非法语法初始化的成员变量的声明。