Я пытаюсь написать простую программу с использованием 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
Есть ли какое-то решение для этого, так как у меня есть две машины, работающие в разных версиях, и обе имеют одну и ту же проблему, и я не могу скомпилировать с ошибками
Эта версия кода исправляет это?
#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, мы просто предоставили итератор типа входы.
Других решений пока нет …