Visual Studio,Xutility错误

时间:2017-04-11 08:34:13

标签: c++ visual-studio compiler-errors

我正在尝试使用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

是否有任何修复,因为我有两台机器,运行不同的版本,都有相同的问题,我无法编译错误

1 个答案:

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

有一些错误:

  • stringalgorithm包含缺失
  • reverseFunction()init()之后定义,因此编译器无法找到它
  • 根据the docsstd::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容器,我们只提供迭代器输入。