奇怪的模板参数列表错误太少

时间:2013-08-13 04:49:26

标签: c++ gcc

set<unsigned int> setId;
vector<int> vecNode;
for (size_t i = 0,set<unsigned int>::iterator it = setId.begin(); i < vecNode.size() && it != setId.end(); i++,it++ ){}

编译器报告: 错误:模板参数列表太少

但如果我这样写:

set<unsigned int> setId;
vector<int> vecNode;
size_t i = 0;
for (set<unsigned int>::iterator it = setId.begin(); i < vecNode.size() && it != setId.end(); i++,it++ ){}

编译成功。

为什么?

1 个答案:

答案 0 :(得分:5)

与你不能做的原因相同

int i = 0, float j = 2.64f;  // ERROR!

使用

size_t i = 0, set<unsigned int>::iterator it = setId.begin()

您实际上正在执行类似上述示例的操作,您正在定义两个不同类型的变量,即size_tset<unsigned int>::iterator

你可以做什么

int i = 0, j = 1;  // OK

您也可以执行类似

的操作
for(size_t i = 0, j = 2; ...; ...) ...
在for循环语句中

。两个示例中的ij都具有相同的类型,intsize_t