转自: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;