Visual Studio, ошибка Xutility

Я пытаюсь написать простую программу с использованием 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> ‘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

Решение

Эта версия кода исправляет это?

#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()следовательно, компилятор не может его найти
  • В соответствии с документы, 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, мы просто предоставили итератор типа входы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]