C++ 使用类模板';迭代器';需要模板参数
这是我的函数,尝试从字符串中删除空白,直到遇到第一个非空白字符C++ 使用类模板';迭代器';需要模板参数,c++,C++,这是我的函数,尝试从字符串中删除空白,直到遇到第一个非空白字符 string removeSpaces(string str) { iterator pos = str.begin(); for (int i = 0; i < str.length(); i++){ if (isspace(str[i])) pos++; else break; } str.erase(re
string removeSpaces(string str)
{
iterator pos = str.begin();
for (int i = 0; i < str.length(); i++){
if (isspace(str[i]))
pos++;
else
break;
}
str.erase(remove(str.begin(), pos, ' '), str.end());
return str;
}
想知道如何修复它。使用
auto pos=…
代替。代码使用命名空间std编译器正在抱怨std::iterator
,这是一个模板。这里使用的正确名称是std::string
的迭代器的名称,即std::string::iterator
。如果您不想输入那么多,可以使用auto
,正如另一条评论所建议的那样。无论您选择哪种方法,都不要使用名称空间std代码>。“这是个麻烦制造者。”尤金,谢谢。它起作用了。只需得到一个警告“'auto'类型说明符是C++11扩展”。“有办法摆脱这个吗?”皮特贝克说Thanks@Rrobinvip要避开警告,请更新makefile,使其至少使用C++11作为语言标准:关于Clang和GCC的选项-std=C++11
。C++14和C++17已经得到了广泛的支持,C++20即将问世。现在仍然使用C++03是没有意义的,除了可能用于遗留平台。请改用auto pos=…
编译器正在抱怨std::iterator
,这是一个模板。这里使用的正确名称是std::string
的迭代器的名称,即std::string::iterator
。如果您不想输入那么多,可以使用auto
,正如另一条评论所建议的那样。无论您选择哪种方法,都不要使用名称空间std代码>。“这是个麻烦制造者。”尤金,谢谢。它起作用了。只需得到一个警告“'auto'类型说明符是C++11扩展”。“有办法摆脱这个吗?”皮特贝克说Thanks@Rrobinvip要避开警告,请更新makefile,使其至少使用C++11作为语言标准:关于Clang和GCC的选项-std=C++11
。C++14和C++17已经得到了广泛的支持,C++20即将问世。现在仍然使用C++03是没有意义的,可能除了传统平台。
iterator pos = str.begin();