我刚看完一些模板视频,我想我错过了一些概念。为什么不调用构造函数,或者为什么在构造函数没有使用所需的数据类型重载时不创建对象?由于我在编写<int>
,编译器知道我不会处理一个int吗?
template <class T>
class Generic {
T var;
public:
Generic(){cout << "ctor called " << endl;}
//Generic (T v) {var = v;}
};
int main () {
Generic<int> generic1();
}
我不能创建这样的对象,然后通过setter修改T var的值吗?为什么我需要一个重载的构造函数,例如Generic<int> generic1(9);
?
答案 0 :(得分:8)
这是一个Most vexing parse问题。
当然你可以通过默认构造函数初始化对象,然后通过setter修改值,这里的问题是你没有定义变量。 Generic<int> generic1();
是一个函数声明,名为generic1
,不带参数并返回Generic<int>
。
你想要的是
Generic<int> generic1;
或
Generic<int> generic1{}; // since C++11