Xutility c ошибка

I am trying to code a simple program using std, but, whenever I do visual studio gives an error based in the Xutility file.

the file is basic but, I wanted to test out some functions this is the code:

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

I am using VS 2015 but I installed 2017 on a new laptop and both have the same problem… these are the errors that I am given

C2794 ‘iterator_category’: is not a member of any direct or indirect base class of ‘std::iterator_traits<_InIt>’ Project1 c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 967
Error
C2938 ‘_Iter_cat_t’ : Failed to specialize alias template Project1 c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 967
Error
C2062 type ‘unknown-type’ unexpected Project1 c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 967
Error
C2675 unary ‘—‘: ‘std::string’ does not define this operator or a conversion to a type acceptable to the predefined operator Project1 c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 3547
Error
C2675 unary ‘++’: ‘std::string’ does not define this operator or a conversion to a type acceptable to the predefined operator Project1 c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 3547

is there any fix for this as I have two machines, running different versions and both have the same problem and I can’t compile with the errors

asked Apr 11, 2017 at 8:34

Christopher 's user avatar

Does this version of the code fixes it ?

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

There were some errors:

  • string and algorithm includes were missing
  • reverseFunction() was defined after init(), hence the compiler could not find it
  • According to the docs, std::reverse takes the begin and end iterators as parameters, and not the string you want to reverse and where you want to store it. There are to reasons for this:

    1- The data transformation is done in-place,

    2- The STL algorithms are meant to be generic and container agnostic: they should work on any collection that is somehow iterable. To convince yourself you can try this piece of code out:

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

This should give you the following output:

Before: 0 1 2 3 4 5 
After:  5 4 3 2 1 0 

As you can see, the algorithm still works, even if we are not using STL containers, we just provided iterator-like inputs.

answered Apr 12, 2017 at 8:04

cmourglia's user avatar

cmourgliacmourglia

2,4331 gold badge17 silver badges33 bronze badges

1

  • Remove From My Forums
  • Question

  • I have a code as below:

    Code Block

    class CSIStructure {…}

    struct SIPidTables {
     SIPidTables(long p, TableColl *t) : m_Pid(p), m_Tables(t) {}
     long m_Pid;
     TableColl *m_Tables;
    };

    inline bool operator<(const SIPidTables &l, const SIPidTables &r) // The error marker shows on this line
    {
     return l.m_Pid < r.m_Pid;
    }

    I am getting compilation error as below: (I have included the entire compilation log)


    f:\program files\microsoft visual studio 8\vc\include\xutility(267) : error C2678: binary ‘<‘ : no operator found which takes a left-hand operand of type ‘const CSIStructure:Tongue TiedITableType’ (or there is no acceptable conversion)
      z:\india-mpeg-internal\codebases\multiplexer\src\ei243 (muxnavigator)\sitreeitems.h(145): could be ‘bool operator <(const SIPidTables &,const SIPidTables &)’ [found using argument-dependent lookup]
    1>        z:\india-mpeg-internal\codebases\multiplexer\src\ei243 (muxnavigator)\sitreeitems.h(122): or ‘bool CSIStructure:Tongue TiedITableType:Surpriseperator <(const CSIStructure:Tongue TiedITableType &)’
    1>        while trying to match the argument list ‘(const CSIStructure:Tongue TiedITableType, CSIStructure:Tongue TiedITableType)’
    1>        f:\program files\microsoft visual studio 8\vc\include\algorithm(1992) : see reference to function template instantiation ‘bool std::_Debug_lt(_Ty1 &,const _Ty2 &,const wchar_t *,unsigned int)’ being compiled
    1>        with
    1>        [
    1>            _Ty=CSIStructure:Tongue TiedITableType,
    1>            _Ty1=CSIStructure:Tongue TiedITableType,
    1>            _Ty2=CSIStructure:Tongue TiedITableType
    1>        ]
    1>        f:\program files\microsoft visual studio 8\vc\include\algorithm(2004) : see reference to function template instantiation ‘_FwdIt std::_Lower_bound<std::_Vector_iterator,_Ty,__w64 int>(_FwdIt,_FwdIt,const _Ty &,_Diff *)’ being compiled
    1>        with
    1>        [
    1>            _FwdIt=std::_Vector_iterator<CSIStructure::SITableType,std::allocator>,
    1>            _Ty=CSIStructure:Tongue TiedITableType,
    1>            _Alloc=std::allocator,
    1>            _Diff=__w64 int
    1>        ]
    1>        z:\india-mpeg-internal\codebases\multiplexer\src\ei243 (muxnavigator)\sitreeitems.cpp(69) : see reference to function template instantiation ‘_FwdIt std::lower_bound<std::_Vector_iterator,CSIStructure:Tongue TiedITableType>(_FwdIt,_FwdIt,const _Ty &)’ being compiled
    1>        with
    1>        [
    1>            _FwdIt=std::_Vector_iterator<CSIStructure::SITableType,std::allocator>,
    1>            _Ty=CSIStructure:Tongue TiedITableType,
    1>            _Alloc=std::allocator
    1>        ]


    The code around xutility(267)

    Code Block

    template inline
     bool __CLRCALL_OR_CDECL _Debug_lt(_Ty1& _Left, const _Ty2& _Right,
      const wchar_t *_Where, unsigned int _Line)
     { // test if _Left < _Right and operator< is strict weak ordering
     if (!(_Left < _Right))
      return (false);
     else if (_Right < _Left)  // The error marker shows on this line
      _DEBUG_ERROR2(«invalid operator<«, _Where, _Line);
     return (true);
     }

    (I have no idea how to stop those smileys from appearing)

    </CSIStructure::SITableType,std::allocator</std::_Vector_iterator</CSIStructure::SITableType,std::allocator</std::_Vector_iterator

Answers

  • According to error messages, maybe you should use the predicate version of lower_bound function at line 126 of sitreeitems.cpp file?

Matubo

0 / 0 / 0

Регистрация: 12.01.2014

Сообщений: 10

1

26.05.2014, 12:04. Показов 3407. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Не могу разобраться с ошибкой :error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов.
проблема возникает в вижуаловском h модуле xutility.h
На 2013 все нормально, на 10 эта ошибка.
Эта ошибка возникает в этом месте.

C++
1
2
3
4
5
6
if (!_Pred(_Left, _Right))  //<<-----
        return (false);
    else if (_Pred(_Right, _Left)) //<<-----
        _DEBUG_ERROR2("invalid operator<", _File, _Line);
    return (true);
    }

Не могу понять как с ней разобраться, буду рад любой помощи.
Основной код.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <math.h>
#include <fstream>
#include "structura.h"
using namespace std;
 
//1 структура(срока)
int max(int a, int b, int c)
{
    if (a>b)
    if (a > c)
        return a;
    else return c;
    else return b;
}
//В основном коде
int main()
{
    bool flag;
    setlocale(LC_ALL, "");
    fstream K;
    ofstream M;
    M.open("out.txt", ios::trunc);
    M.close();
    int j;
    str m;
    m.k=0; 
    m.count=0;
    j = 1;
    int i = 0;
    ifstream f("in.txt");
    while (!f.eof())
    {
        f.getline(m.l[i].a, N);
        i++;
        m.count++;
    }
    f.close();
    cout << "Kol-vo strok";
    cout << m.count;
    system("pause");
    K.open("out.txt", ios::app);
    cout << "Номера строк:";
    K << "Номера строк:";
 
    for (i = 0; i < m.count; i++)
    {
        for (j = 0; m.l[i].a[j] != '\0'; j++)
        {
 
            cout << m.l[i].a[j];
 
        }
        cout << "\n";
    }
    j = 0;
 
    for (i = 0; i < m.count; i++)
    {
        flag = 0;
        for (j = 0; m.l[i].a[j] != '\0'; j++)
        {
            string s = m.l[i].a;
            if (((m.l[i].a[j] == '.') || (m.l[i].a[j] == '!') || (m.l[i].a[j] == '?')) && (m.l[i].a[j + 1] == ' ') && (m.l[i].a[j + 2] == ' '))
            {
                if (!flag)
                {
                    cout << i + 1;
                    K << i + 1;
                }
                flag = 1;
                if (max(s.find_last_of('.'), s.find_last_of('?'), s.find_last_of('!')) == j)
                {
                    string s2 = m.l[i + 1].a;
                    while (s2.find('.') == -1 && s2.find('?') == -1 && s2.find('!') == -1)
                    {
                        s2 = m.l[i + 1].a;
                        i++;
                        flag = 0;
                        cout << i + 1;
                        K << i + 1;
                        j = 0;
 
                    }
                }
 
 
 
            }
            
        }
    }
    K.close();
    system("pause");
}

сруктура.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
const int N = 200;
struct line
{
 
    char a[N]; //сама строка
    //номер строки
};
//2 структура(все вместе)
struct str
{
    int k;
    line l[N]; //массив строк
    int count; //количество строк
};



0



:)

Эксперт С++

4773 / 3267 / 497

Регистрация: 19.02.2013

Сообщений: 9,046

26.05.2014, 14:04

2

что за тип str (строка 29)?



0



0 / 0 / 0

Регистрация: 12.01.2014

Сообщений: 10

27.05.2014, 12:27

 [ТС]

3

Цитата
Сообщение от Tulosba
Посмотреть сообщение

что за тип str (строка 29)?

Объявление структуры str именем m



0



Tulosba

:)

Эксперт С++

4773 / 3267 / 497

Регистрация: 19.02.2013

Сообщений: 9,046

27.05.2014, 14:34

4

Лучший ответ Сообщение было отмечено Matubo как решение

Решение

Matubo, чтобы собиралось, исправьте начало файла:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <math.h>
#include <fstream>
//using namespace std;
 
using std::cout;
using std::ofstream;
using std::ifstream;
using std::fstream;
using std::endl;
using std::ios;
using std::string;

Корректность алгоритма не проверял.



0



0 / 0 / 0

Регистрация: 12.01.2014

Сообщений: 10

29.05.2014, 22:07

 [ТС]

5

Цитата
Сообщение от Tulosba
Посмотреть сообщение

чтобы собиралось, исправьте начало файла:

Спасибо большое, все собирается)



0



I wrote a program in C# for my discrete mathematics class and it worked absolutely fine. My teacher asked me to submit the code in c++ so she can run it on her mac and so I created a new project and typed the code in. After changing everything required (basic syntax editing and changing Lists to vectors) I tried compiling my program and got these errors. I am using visual studio 2010.

Error 6 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 373 1 hw9_2_cpp
Error 8 error C2868: ‘std::iterator_traits<_Iter>::iterator_category’ : illegal syntax for using-declaration; expected qualified-name c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 373 1 hw9_2_cpp
Error 7 error C2602: ‘std::iterator_traits<_Iter>::iterator_category’ is not a member of a base class of ‘std::iterator_traits<_Iter>’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 373 1 hw9_2_cpp
Error 5 error C2146: syntax error : missing ‘;’ before identifier ‘iterator_category’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 373 1 hw9_2_cpp
Error 4 error C2039: ‘iterator_category’ : is not a member of ‘std::vector<_Ty,_Ax>’ c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 373 1 hw9_2_cpp

I haven’t posted the source code yet, because my program compiles successfully using g++ on a linux machine. I get no warnings and errors using that and the execution of program is fine too.

I have no idea why I am getting this error. Could it possible be that I messed up that xutility file?
Do you suggest replacing that file (I really don’t want to get into a version mismatch and get screwed up!) ?

Any help/suggestions are highly appreciated.

Thank you,
-T2

P.S.: I came back here after an year and now it reads «Contribute New Article» instead of posting a question or something. I couldn’t find anything like that and I think it’s just that way. I was just wondering as it’s not really an article but a question.

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

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

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

Понравилась статья? Поделить с друзьями:
  • Xsolla ошибка 404
  • Xsolla ошибка 3030
  • Xrobot коды ошибок
  • Xsolla ошибка 3001
  • Xsolla 2002 ошибка