我正在尝试使用std编写一个简单的程序,但是,每当我做visual studio时会在Xutility文件中给出一个错误。
该文件是基本的,但我想测试一些函数,这是代码:
#include <iostream>
std::string text = "racecar", temp, revText;
bool yes;
void init(){
//std::cin >> text ;
reverseFunction(text);}
void reverseFunction(std::string userWord){
std::reverse(userWord, revText);}
int main(int argc, char *argv[]){
init();}
我正在使用VS 2015,但我在一台新笔记本电脑上安装了2017,并且两者都有同样的问题......这些是我给出的错误
C2794'iterator_category':不是'std :: iterator_traits&lt; _InIt&gt;'的任何直接或间接基类的成员Project1 c:\ program files(x86)\ microsoft visual studio 14.0 \ vc \ include \ xutility 967 错误
C2938'_Iter_cat_t':无法专门化别名模板Project1 c:\ program files(x86)\ microsoft visual studio 14.0 \ vc \ include \ xutility 967 错误
C2062类型'未知类型'意外Project1 c:\ program files(x86)\ microsoft visual studio 14.0 \ vc \ include \ xutility 967 错误
C2675一元' - ':'std :: string'没有定义此运算符或转换为预定义运算符可接受的类型Project1 c:\ program files(x86)\ microsoft visual studio 14.0 \ vc \ include \ xutility 3547
错误
C2675一元'++':'std :: string'没有定义此运算符或转换为预定义运算符可接受的类型Project1 c:\ program files(x86)\ microsoft visual studio 14.0 \ vc \ include \ xutility 3547
是否有任何修复,因为我有两台机器,运行不同的版本,都有相同的问题,我无法编译错误
答案 0 :(得分:0)
此版本的代码是否修复了它?
#include <iostream>
#include <string>
#include <algorithm>
std::string text = "racecar", temp, revText;
bool yes;
void reverseFunction(std::string userWord)
{
revText = userWord;
std::reverse(revText.begin(), revText.end());
}
void init()
{
//std::cin >> text ;
reverseFunction(text);
}
int main(int argc, char *argv[])
{
init();
}
有一些错误:
string
和algorithm
包含缺失reverseFunction()
在 init()
之后定义,因此编译器无法找到它根据the docs,std::reverse
将begin
和end
迭代器作为参数,而不是要反转的字符串以及要存储的位置它。有理由这样做:
1-数据转换就地完成,
2- STL算法意味着通用和容器不可知:它们应该在任何可迭代的集合上工作。为了说服自己,你可以试试这段代码:
#include <algorithm>
#include <iostream>
int main()
{
int t[] = { 0, 1, 2, 3, 4, 5 };
int len = sizeof t / sizeof(int);
std::cout << "Before: ";
for (int i = 0; i < len; ++i) std::cout << t[i] << " ";
std::cout << std::endl;
std::reverse(t, t + len);
std::cout << "After: ";
for (int i = 0; i < len; ++i) std::cout << t[i] << " ";
std::cout << std::endl;
return 0;
}
这应该给你以下输出:
Before: 0 1 2 3 4 5
After: 5 4 3 2 1 0
正如您所看到的,算法仍然有效,即使我们不使用STL容器,我们只提供迭代器输入。