Visual Studio, Xutility error

Visual Studio, Xutility error

本文关键字:error Xutility Studio Visual      更新时间:2023-10-16

我正在尝试使用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<_InIt>' 的任何直接或间接基类的成员 项目1 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xutility 967 错误
C2938"_Iter_cat_t":无法专用化别名模板 项目1 C:\程序文件 (x86)\Microsoft Visual Studio 14.0\VC\include\xutility 967 错误
C2062 类型"未知类型"意外的项目 1 c:\程序文件 (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:\程序文件 (x86)\Microsoft Visual Studio 14.0\VC\include\xutility 3547

是否有任何解决方法,因为我有两台机器,运行不同的版本,并且都有相同的问题,并且我无法使用错误进行编译

这个版本的代码可以修复它吗?

#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();
}

有一些错误:

  • 缺少stringalgorithm
  • reverseFunction()是在init()之后定义的,因此编译器找不到它
  • 根据文档,std::reversebeginend迭代器作为参数,而不是要反转的字符串以及要存储它的位置。这是有原因的:

    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 容器,我们只是提供了类似迭代器的输入。

相关文章: