Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用类模板';迭代器';需要模板参数_C++ - Fatal编程技术网

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=…
代替。代码使用命名空间stdstd::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();