type/value mismatch at argument 1

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

你可能感兴趣的:(type/value mismatch at argument 1)