转自:http://www.programlife.net/type-value-mismatch-at-argument-1.html
最近又开始出没于CSDN,看到网友问到STL的提问,而正好自己也在看STL,所以就回答有关STL的问题:
问:关于C++ STL运用的问题。求高手解答下
是关于一个STL运用的问题,有一个模板类,为
template <class T> class Word { private: vector <T> vec; //..... }; class Code { private: vector <Word> code;//问题在这里。错误显示是 type/value mismatch at argument 1 in //template parameter list for `template<class _Tp, class _Alloc> class std::vector' public: Code(){} //............. }; int main() { Code c; Codeword<class T> fc; int p,m,n; cin >> p; cin >> n; cin >>m; for(int i =0;i<n;i++) fc.Add(Mint(0)); fc.weight(); c.Add(fc); // 这里也会出错。说无法找到函数。在Code类里。 } //请高手帮忙指导下吧。谢谢了。
我的回答:
你定义的是一个类模板,使用的时候必须加上参数类型,就想你使用vector的时候,不能这么定义变量是吧:
vector v; //错误 vector<int> v; //OK
所以你的类Code里面使用Word的时候,也给定参数类型,你现在应该还不知道需要什么类型,所以又要引入template,所以Code类也应该是一个类模板:
template<class T> //加上模板 class Code { private: vector<Word<T> > code; //注意两个尖括号在一起也有一个空格,否则会被认为是>> public: Code(){} };
同样,在定义Code变量时也需要指明类型,这时候就可以指定具体类型了,比如Code<int> c;下面是完整的代码
#include <iostream> #include <vector> using namespace std; template <class T> class Word { private: vector<T> vec; }; template<class T> class Code { private: vector<Word<T> > code; public: Code(){} }; int main() { Code<int> c; return 0;