Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249

Почему появляется ошибка С2064 (очень давно не писала на С++)

10.07.2017, 22:36. Показов 1493. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему тут появляется эта ошибка?
Заранее спасибо
C++
1
2
3
4
5
6
7
8
9
10
void FileSorter::sortString(bool (FileSorter::*needsToBeMoved)(string, string))
{
    for (int i = 1; i < realSize; i++) {
        string currentElement = stringContent[i];
        int j;
        for (j = i - 1; j > 0 && needsToBeMoved(currentElement, stringContent[j]); j--) // C2064
            stringContent[j] = stringContent[j - 1];
        stringContent[j] = currentElement;
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2017, 22:36
Ответы с готовыми решениями:

Не понимаю почему ругается компилятор (давно не писала на С++)
FileSorter.h: #pragma once #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; class FileSorter...

Давно не писала ничего на Dev C++ выдает ошибки не могу понять как их исправить
#include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; int main() { float xa,xb,xc,ya,yb,yc; ...

Очень часто появляется ошибка KMODE_EXCEPTION_NOT_HANDLED
Последняя время очень часто стала появляться ошибка KMODE_EXCEPTION_NOT_HANDLED синий экран и перезагрузка. Появляется как мне показалось...

19
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
10.07.2017, 22:50
Слишком много неизвестных: что такое realSize, stringContent. С какими аргументами вызывается sortString?
0
Заблокирован
10.07.2017, 22:53
Потому что указатели на методы надо вызывать с привлечением объекта и с использованием соответствующего синтаксиса, а не как свободные функции.

Ты всё возишься с тем несчастным заказом?
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
10.07.2017, 22:55
Цитата Сообщение от daun-autist Посмотреть сообщение
Потому что указатели на методы надо вызывать с привлечением объекта и с использованием соответствующего синтаксиса
Это как?
0
Заблокирован
10.07.2017, 22:59
notAll, https://isocpp.org/wiki/faq/pointers-to-members
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 23:02
Цитата Сообщение от MayaNash Посмотреть сообщение
C++
1
needsToBeMoved(currentElement, stringContent[j])
C++
1
(this ->*needsToBeMoved)(currentElement, stringContent[j])
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:12  [ТС]
nd2, я попыталась сделать их статическими... Но ошибок стало еще больше)))
0
Заблокирован
10.07.2017, 23:13
MayaNash, сколько ты дерёшь за такую откровенную халтуру?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 23:16
Цитата Сообщение от MayaNash Посмотреть сообщение
я попыталась сделать их статическими...
Я, разве, предлагал?
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:19  [ТС]
nd2, не предлагали. Кстати, на ваш вариант тоже выдает ошибку - хочет видеть функцию класса, а не указатель на функцию, и скобки ему тоже не нравятся. Сейчас кину весь код, короче...

Добавлено через 1 минуту
FileSorterCaller.cpp:
C++
1
2
3
4
5
6
7
#include "FileSorter.h"
 
int main(int argsNumber, char *args[]) {
    FileSorter fileSorter(argsNumber, args);
    cout << "Constructor passed...\n";
    fileSorter.sortTheFile();
}
FileSorter.h:
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
#pragma once
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
class FileSorter
{
public:
    FileSorter();
    FileSorter(int argsNumber, char *args[]);
    FileSorter(string inputFileName, string OutputFileName, string containsStrings, string ascending);
    void sortTheFile();
    ~FileSorter();
private:
    static const int maxSize = 100;
    int realSize;
    string inputFileName,
        outputFileName,
        containsStringsString,
        ascendingString,
        stringContent[maxSize];
    int intContent[maxSize];
    static const char
        ascending[],
        descending[],
        fileDoesNotExist[],
        noArguments[],
        wrongArgs[],
        wrongArgsNumber[];
 
    bool argsAreOk(string fileContent, string sortType);
    int calculateRealSize();
    bool aBiggerThanBInt(int a, int b);
    bool aLessThanBInt(int a, int b);
    bool aBiggerThanBString(string a, string b);
    bool aLessThanBString(string a, string b);
    bool readTheFile();
    void printContent();
    void sortTheContent();
    void sortNumeric(bool(FileSorter::*needsToBeMoved)(int, int));
    void sortString(bool(FileSorter::*needsToBeMoved)(string, string));
    bool contentIsNumeric();
    void convertToNumeric();
};
FileSorter.cpp:
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include "FileSorter.h"
 
const char FileSorter::ascending[] = "-a";
const char FileSorter::descending[] = "-d";
const char FileSorter::fileDoesNotExist[] = "File doesn't exist!\n";
const char FileSorter::noArguments[] = "No parameters!\n";
const char FileSorter::wrongArgs[] = "Wrong arguments values!\n";
const char FileSorter::wrongArgsNumber[] = "Wrong arguments number!\n";
 
FileSorter::FileSorter()
{
    cout << noArguments;
    exit(0);
}
 
FileSorter::FileSorter(int argsNumber, char *args[])
{
    if (argsNumber != 5) {
        cout << wrongArgsNumber;
        exit(0);
    }
    else {
        *this = FileSorter(args[1], args[2], args[3], args[4]);
    }
}
 
FileSorter::FileSorter(string inputFileName, string outputFileName, string containsStrings, string ascending)
{
    this->inputFileName.append(inputFileName);
    this->outputFileName.append(outputFileName);
    this->containsStringsString.append(containsStrings);
    this->ascendingString.append(ascending);
}
 
FileSorter::~FileSorter()
{
}
 
 
void FileSorter::sortTheFile()
{
    if (!readTheFile()) {
        cout << fileDoesNotExist;
    }
    else {
        readTheFile();
        printContent();
        sortTheContent();
    }
}
 
bool FileSorter::argsAreOk(string fileContent, string sortType) {
    if (fileContent.compare("-s") != 0 && fileContent.compare("-i") != 0)
        return false;
    if (sortType.compare("-a") != 0 && sortType.compare("-d") != 0)
        return false;
    return true;
}
 
int FileSorter::calculateRealSize()
{
    for (int i = 0; i < maxSize; i++)
        if (stringContent[i].empty())
            return i;
    return maxSize;
}
 
bool FileSorter::aBiggerThanBInt(int a, int b)
{
    return (a > b);
}
 
bool FileSorter::aLessThanBInt(int a, int b)
{
    return (a < b);
}
 
bool FileSorter::aBiggerThanBString(string a, string b)
{
    return a.compare(b) > 0;
}
 
bool FileSorter::aLessThanBString(string a, string b)
{
    return a.compare(b) < 0;
}
 
bool FileSorter::readTheFile()
{
    cout << "We are in readTheFile function...\n";
    cout << "InputFileName: [" << inputFileName << "]\n";
    ifstream fin(inputFileName);
    if (!fin.is_open()) {
        return false;
    }
    else {
        for (int i = 0;
            i < maxSize
            && fin >> stringContent[i]
            && !fin.eof();
            i++);
        return true;
    }
}
 
void FileSorter::printContent()
{
    for (int i = 0; i < maxSize && !stringContent[i].empty(); i++) {
        cout << stringContent[i] << endl;
    }
}
 
void FileSorter::sortTheContent()
{
    realSize = calculateRealSize();
    if (contentIsNumeric()) {
        convertToNumeric();
        if (ascendingString.compare(ascending) == 0)
            sortNumeric(&FileSorter::aBiggerThanBInt);
        else
            sortNumeric(&FileSorter::aLessThanBInt);
    }
    else
        if (ascendingString.compare(ascending) == 0)
            sortString(&FileSorter::aBiggerThanBString);
        else
            sortString(&FileSorter::aLessThanBString);
}
 
void FileSorter::sortNumeric(bool (FileSorter::*needsToBeMoved)(int, int))
{
    for (int i = 1; i < realSize; i++) {
        int currentElement = intContent[i];
        int j;
        for (j = i - 1; j > 0 && this->(*needsToBeMoved)(currentElement, intContent[j]); j--)
            intContent[j] = intContent[j - 1];
        intContent[j] = currentElement;
    }
}
 
void FileSorter::sortString(bool (FileSorter::*needsToBeMoved)(string, string))
{
    for (int i = 1; i < realSize; i++) {
        string currentElement = stringContent[i];
        int j;
        for (j = i - 1; j > 0 && needsToBeMoved(currentElement, stringContent[j]); j--)
            stringContent[j] = stringContent[j - 1];
        stringContent[j] = currentElement;
    }
}
 
bool FileSorter::contentIsNumeric()
{
    for (int i = 0; i < maxSize; i++)
        for (int j = 0; (size_t)j < stringContent[i].length(); j++)
            if (stringContent[i].at(j) < '0' || stringContent[i].at(j) > '9')
                return false;
    return true;
}
 
void FileSorter::convertToNumeric()
{
    for (int i = 0; i < maxSize && !stringContent[i].empty(); i++)
        intContent[i] = atoi(stringContent[i].c_str());
}
Добавлено через 44 секунды
Code
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
1>------ Перестроение всех файлов начато: проект: Проект1, Конфигурация: Debug Win32 ------
1>FileSorterCaller.cpp
1>FileSorter.cpp
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(135): error C2059: синтаксическая ошибка: (
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(135): error C2039: j: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(135): error C2059: синтаксическая ошибка: )
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(136): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "intContent"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(136): error C2039: j: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(136): error C2597: недопустимая ссылка на нестатический член "FileSorter::intContent"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(136): error C3867: "FileSorter::intContent": нестандартный синтаксис; используйте "&", чтобы создать указатель на член
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(137): error C2039: j: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(137): error C2597: недопустимая ссылка на нестатический член "FileSorter::intContent"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(137): error C3867: "FileSorter::intContent": нестандартный синтаксис; используйте "&", чтобы создать указатель на член
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(137): error C2039: currentElement: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(141): error C2059: синтаксическая ошибка: <tag>::*
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(142): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(142): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(154): error C2039: i: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(154): error C2597: недопустимая ссылка на нестатический член "FileSorter::maxSize"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(154): error C3867: "FileSorter::maxSize": нестандартный синтаксис; используйте "&", чтобы создать указатель на член
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(154): error C2568: <: не удается разрешить перегрузку функции
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2039: j: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2039: size_t: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "j"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2039: i: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2597: недопустимая ссылка на нестатический член "FileSorter::stringContent"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C3867: "FileSorter::stringContent": нестандартный синтаксис; используйте "&", чтобы создать указатель на член
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2039: length: не является членом "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "j"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2059: синтаксическая ошибка: ;
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(155): error C2059: синтаксическая ошибка: )
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(156): error C2143: синтаксическая ошибка: отсутствие ";" перед "if"
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(156): error C2065: i: необъявленный идентификатор
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(156): error C2228: выражение слева от ".at" должно представлять класс, структуру или объединение
1>d:\заказы\del (vk)\1\проект1\проект1\filesorter.cpp(156): error C2065: j: необъявленный идентификатор
1>Создание кода...
1>Сборка проекта "Проект1.vcxproj" завершена с ошибкой.
========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 23:37
Цитата Сообщение от MayaNash Посмотреть сообщение
и скобки ему тоже не нравятся.
Цитата Сообщение от MayaNash Посмотреть сообщение
C++
1
this->(*needsToBeMoved)(currentElement, intContent[j])
...
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
(this ->*needsToBeMoved)(currentElement, stringContent[j])
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:42  [ТС]
nd2,
Code
1
2
3
4
5
6
7
8
9
1>------ Перестроение всех файлов начато: проект: Проект1, Конфигурация: Debug Win32 ------
1>FileSorterCaller.cpp
1>FileSorter.cpp
1>d:\заказы\михаил хамхоев (vk)\1\проект1\проект1\filesorter.cpp(148): error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов
1>d:\заказы\михаил хамхоев (vk)\1\проект1\проект1\filesorter.cpp(159): error C2039: needsToBeMoved: не является членом "FileSorter"
1>d:\заказы\михаил хамхоев (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>Создание кода...
1>Сборка проекта "Проект1.vcxproj" завершена с ошибкой.
========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 23:45
Я не вижу: что и как исправлено.
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:48  [ТС]
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
#pragma once
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
class FileSorter
{
public:
    FileSorter();
    FileSorter(int argsNumber, char *args[]);
    FileSorter(string inputFileName, string OutputFileName, string containsStrings, string ascending);
    void sortTheFile();
    ~FileSorter();
private:
    static const int maxSize = 100;
    int realSize;
    string inputFileName,
        outputFileName,
        containsStringsString,
        ascendingString,
        stringContent[maxSize];
    int intContent[maxSize];
    static const char
        ascending[],
        descending[],
        strings[],
        ints[],
        fileDoesNotExist[],
        noArguments[],
        wrongArgs[],
        wrongArgsNumber[],
        contentIsNotNumeric[];
 
    bool argsAreOk(string fileContent, string sortType);
    int calculateRealSize();
    bool contentIsNumeric();
    bool contentShouldBeNumeric();
    bool aBiggerThanBInt(int a, int b);
    bool aLessThanBInt(int a, int b);
    bool aBiggerThanBString(string a, string b);
    bool aLessThanBString(string a, string b);
    bool readTheFile();
    void printContent();
    void printOutput();
 
    void sortTheContent();
 
    void sortNumeric(bool(FileSorter::*needsToBeMoved)(int, int));
    void sortString(bool(FileSorter::*needsToBeMoved)(string, string));
    void convertToNumeric();
};
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#include "FileSorter.h"
 
const char FileSorter::ascending[] = "-a";
const char FileSorter::descending[] = "-d";
const char FileSorter::strings[] = "-s";
const char FileSorter::ints[] = "-i";
const char FileSorter::fileDoesNotExist[] = "File doesn't exist!\n";
const char FileSorter::noArguments[] = "No parameters!\n";
const char FileSorter::wrongArgs[] = "Wrong arguments values!\n";
const char FileSorter::wrongArgsNumber[] = "Wrong arguments number!\n";
const char FileSorter::contentIsNotNumeric[] = "Content is not numeric!\n";
 
FileSorter::FileSorter()
{
    cout << noArguments;
    exit(0);
}
 
FileSorter::FileSorter(int argsNumber, char *args[])
{
    if (argsNumber != 5) {
        cout << wrongArgsNumber;
        exit(0);
    }
    else {
        *this = FileSorter(args[1], args[2], args[3], args[4]);
    }
}
 
FileSorter::FileSorter(string inputFileName, string outputFileName, string containsStrings, string ascending)
{
    this->inputFileName.append(inputFileName);
    this->outputFileName.append(outputFileName);
    this->containsStringsString.append(containsStrings);
    this->ascendingString.append(ascending);
}
 
FileSorter::~FileSorter()
{
}
 
 
void FileSorter::sortTheFile()
{
    if (!readTheFile()) {
        cout << fileDoesNotExist;
    }
    else {
        readTheFile();
        printContent();
        sortTheContent();
    }
}
 
bool FileSorter::argsAreOk(string fileContent, string sortType) {
    if (fileContent.compare("-s") != 0 && fileContent.compare("-i") != 0)
        return false;
    if (sortType.compare("-a") != 0 && sortType.compare("-d") != 0)
        return false;
    return true;
}
 
int FileSorter::calculateRealSize()
{
    for (int i = 0; i < maxSize; i++)
        if (stringContent[i].empty())
            return i;
    return maxSize;
}
 
bool FileSorter::aBiggerThanBInt(int a, int b)
{
    return (a > b);
}
 
bool FileSorter::aLessThanBInt(int a, int b)
{
    return (a < b);
}
 
bool FileSorter::aBiggerThanBString(string a, string b)
{
    return a.compare(b) > 0;
}
 
bool FileSorter::aLessThanBString(string a, string b)
{
    return a.compare(b) < 0;
}
 
bool FileSorter::readTheFile()
{
    cout << "We are in readTheFile function...\n";
    cout << "InputFileName: [" << inputFileName << "]\n";
    ifstream fin(inputFileName);
    if (!fin.is_open()) {
        return false;
    }
    else {
        for (int i = 0;
            i < maxSize
            && fin >> stringContent[i]
            && !fin.eof();
            i++);
        return true;
    }
}
 
void FileSorter::printContent()
{
    for (int i = 0; i < maxSize && !stringContent[i].empty(); i++) {
        cout << stringContent[i] << endl;
    }
}
 
void FileSorter::printOutput()
{
    ofstream fout(outputFileName);
    for (int i = 0; i < realSize; i++)
        if (contentShouldBeNumeric())
            cout << intContent[i] << endl;
        else
            cout << stringContent[i] << endl;
}
 
void FileSorter::sortTheContent()
{
    realSize = calculateRealSize();
    if (contentShouldBeNumeric()) {
        convertToNumeric();
        if (ascendingString.compare(ascending) == 0)
            sortNumeric(&FileSorter::aBiggerThanBInt);
        else
            sortNumeric(&FileSorter::aLessThanBInt);
    }
    else
        if (ascendingString.compare(ascending) == 0)
            sortString(&FileSorter::aBiggerThanBString);
        else
            sortString(&FileSorter::aLessThanBString);
}
 
void FileSorter::sortNumeric(bool (FileSorter::*needsToBeMoved)(int, int))
{
    for (int i = 1; i < realSize; i++) {
        int currentElement = intContent[i];
        int j;
        for (j = i - 1; j > 0 && this->*needsToBeMoved(currentElement, intContent[j]); j--)
            intContent[j] = intContent[j - 1];
        intContent[j] = currentElement;
    }
}
 
void FileSorter::sortString(bool (FileSorter::*needsToBeMoved)(string, string))
{
    for (int i = 1; i < realSize; i++) {
        string currentElement = stringContent[i];
        int j;
        for (j = i - 1; j > 0 && this->needsToBeMoved(currentElement, stringContent[j]); j--)
            stringContent[j] = stringContent[j - 1];
        stringContent[j] = currentElement;
    }
}
 
bool FileSorter::contentIsNumeric()
{
    for (int i = 0; i < maxSize; i++)
        for (int j = 0; (size_t)j < stringContent[i].length(); j++)
            if (stringContent[i].at(j) < '0' || stringContent[i].at(j) > '9')
                return false;
    return true;
}
 
bool FileSorter::contentShouldBeNumeric()
{
    return containsStringsString.compare(strings) != 0;
}
 
void FileSorter::convertToNumeric()
{
    if (!contentIsNumeric()) {
        cout << contentIsNotNumeric;
        exit(0);
    }
    for (int i = 0; i < maxSize && !stringContent[i].empty(); i++)
        intContent[i] = atoi(stringContent[i].c_str());
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 23:52
MayaNash, внимательно посмотри, как ты пишешь, и как я предлагаю.
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:54  [ТС]
nd2, увидела скобочки, но все равно ошибка еще осталась.
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#include "FileSorter.h"
 
const char FileSorter::ascending[] = "-a";
const char FileSorter::descending[] = "-d";
const char FileSorter::strings[] = "-s";
const char FileSorter::ints[] = "-i";
const char FileSorter::fileDoesNotExist[] = "File doesn't exist!\n";
const char FileSorter::noArguments[] = "No parameters!\n";
const char FileSorter::wrongArgs[] = "Wrong arguments values!\n";
const char FileSorter::wrongArgsNumber[] = "Wrong arguments number!\n";
const char FileSorter::contentIsNotNumeric[] = "Content is not numeric!\n";
 
FileSorter::FileSorter()
{
    cout << noArguments;
    exit(0);
}
 
FileSorter::FileSorter(int argsNumber, char *args[])
{
    if (argsNumber != 5) {
        cout << wrongArgsNumber;
        exit(0);
    }
    else {
        *this = FileSorter(args[1], args[2], args[3], args[4]);
    }
}
 
FileSorter::FileSorter(string inputFileName, string outputFileName, string containsStrings, string ascending)
{
    this->inputFileName.append(inputFileName);
    this->outputFileName.append(outputFileName);
    this->containsStringsString.append(containsStrings);
    this->ascendingString.append(ascending);
}
 
FileSorter::~FileSorter()
{
}
 
 
void FileSorter::sortTheFile()
{
    if (!readTheFile()) {
        cout << fileDoesNotExist;
    }
    else {
        readTheFile();
        printContent();
        sortTheContent();
    }
}
 
bool FileSorter::argsAreOk(string fileContent, string sortType) {
    if (fileContent.compare("-s") != 0 && fileContent.compare("-i") != 0)
        return false;
    if (sortType.compare("-a") != 0 && sortType.compare("-d") != 0)
        return false;
    return true;
}
 
int FileSorter::calculateRealSize()
{
    for (int i = 0; i < maxSize; i++)
        if (stringContent[i].empty())
            return i;
    return maxSize;
}
 
bool FileSorter::aBiggerThanBInt(int a, int b)
{
    return (a > b);
}
 
bool FileSorter::aLessThanBInt(int a, int b)
{
    return (a < b);
}
 
bool FileSorter::aBiggerThanBString(string a, string b)
{
    return a.compare(b) > 0;
}
 
bool FileSorter::aLessThanBString(string a, string b)
{
    return a.compare(b) < 0;
}
 
bool FileSorter::readTheFile()
{
    cout << "We are in readTheFile function...\n";
    cout << "InputFileName: [" << inputFileName << "]\n";
    ifstream fin(inputFileName);
    if (!fin.is_open()) {
        return false;
    }
    else {
        for (int i = 0;
            i < maxSize
            && fin >> stringContent[i]
            && !fin.eof();
            i++);
        return true;
    }
}
 
void FileSorter::printContent()
{
    for (int i = 0; i < maxSize && !stringContent[i].empty(); i++) {
        cout << stringContent[i] << endl;
    }
}
 
void FileSorter::printOutput()
{
    ofstream fout(outputFileName);
    for (int i = 0; i < realSize; i++)
        if (contentShouldBeNumeric())
            cout << intContent[i] << endl;
        else
            cout << stringContent[i] << endl;
}
 
void FileSorter::sortTheContent()
{
    realSize = calculateRealSize();
    if (contentShouldBeNumeric()) {
        convertToNumeric();
        if (ascendingString.compare(ascending) == 0)
            sortNumeric(&FileSorter::aBiggerThanBInt);
        else
            sortNumeric(&FileSorter::aLessThanBInt);
    }
    else
        if (ascendingString.compare(ascending) == 0)
            sortString(&FileSorter::aBiggerThanBString);
        else
            sortString(&FileSorter::aLessThanBString);
}
 
void FileSorter::sortNumeric(bool (FileSorter::*needsToBeMoved)(int, int))
{
    for (int i = 1; i < realSize; i++) {
        int currentElement = intContent[i];
        int j;
        for (j = i - 1; j > 0 && (this->*needsToBeMoved)(currentElement, intContent[j]); j--)
            intContent[j] = intContent[j - 1];
        intContent[j] = currentElement;
    }
}
 
void FileSorter::sortString(bool (FileSorter::*needsToBeMoved)(string, string))
{
    for (int i = 1; i < realSize; i++) {
        string currentElement = stringContent[i];
        int j;
        for (j = i - 1; j > 0 && (this->needsToBeMoved)(currentElement, stringContent[j]); j--)
            stringContent[j] = stringContent[j - 1];
        stringContent[j] = currentElement;
    }
}
 
bool FileSorter::contentIsNumeric()
{
    for (int i = 0; i < maxSize; i++)
        for (int j = 0; (size_t)j < stringContent[i].length(); j++)
            if (stringContent[i].at(j) < '0' || stringContent[i].at(j) > '9')
                return false;
    return true;
}
 
bool FileSorter::contentShouldBeNumeric()
{
    return containsStringsString.compare(strings) != 0;
}
 
void FileSorter::convertToNumeric()
{
    if (!contentIsNumeric()) {
        cout << contentIsNotNumeric;
        exit(0);
    }
    for (int i = 0; i < maxSize && !stringContent[i].empty(); i++)
        intContent[i] = atoi(stringContent[i].c_str());
}
Code
1
2
3
4
5
6
7
8
1>------ Перестроение всех файлов начато: проект: Проект1, Конфигурация: Debug Win32 ------
1>FileSorterCaller.cpp
1>FileSorter.cpp
1>d:\заказы\михаил хамхоев (vk)\1\проект1\проект1\filesorter.cpp(159): error C2039: needsToBeMoved: не является членом "FileSorter"
1>d:\заказы\михаил хамхоев (vk)\1\проект1\проект1\filesorter.h(9): note:  см. объявление "FileSorter"
1>Создание кода...
1>Сборка проекта "Проект1.vcxproj" завершена с ошибкой.
========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========
Офф программировать в 12 ночи это не очень хорошая идея...

Добавлено через 25 секунд
nd2, спасибо большое за помощь
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.07.2017, 00:10
Цитата Сообщение от MayaNash Посмотреть сообщение
но все равно ошибка еще осталась.
MayaNash, ты код на ходу меняешь, и предлагаешь мне, не видя изменений, разбираться в этом.
Сначала у тебя класс такой:
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
class FileSorter
{
public:
    FileSorter();
    FileSorter(int argsNumber, char *args[]);
    FileSorter(string inputFileName, string OutputFileName, string containsStrings, string ascending);
    void sortTheFile();
    ~FileSorter();
private:
    static const int maxSize = 100;
    int realSize;
    string inputFileName,
        outputFileName,
        containsStringsString,
        ascendingString,
        stringContent[maxSize];
    int intContent[maxSize];
    static const char
        ascending[],
        descending[],
        fileDoesNotExist[],
        noArguments[],
        wrongArgs[],
        wrongArgsNumber[];
 
    bool argsAreOk(string fileContent, string sortType);
    int calculateRealSize();
    bool aBiggerThanBInt(int a, int b);
    bool aLessThanBInt(int a, int b);
    bool aBiggerThanBString(string a, string b);
    bool aLessThanBString(string a, string b);
    bool readTheFile();
    void printContent();
    void sortTheContent();
    void sortNumeric(bool(FileSorter::*needsToBeMoved)(int, int));
    void sortString(bool(FileSorter::*needsToBeMoved)(string, string));
    bool contentIsNumeric();
    void convertToNumeric();
};
А теперь, явно другой.

Добавлено через 6 минут
Вот твой первоначальный код (с исправлениями), компилируется без ошибок:
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#pragma once
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
class FileSorter
{
public:
    FileSorter();
    FileSorter(int argsNumber, char *args[]);
    FileSorter(string inputFileName, string OutputFileName, string containsStrings, string ascending);
    void sortTheFile();
    ~FileSorter();
private:
    static const int maxSize = 100;
    int realSize;
    string inputFileName,
        outputFileName,
        containsStringsString,
        ascendingString,
        stringContent[maxSize];
    int intContent[maxSize];
    static const char
        ascending[],
        descending[],
        fileDoesNotExist[],
        noArguments[],
        wrongArgs[],
        wrongArgsNumber[];
 
    bool argsAreOk(string fileContent, string sortType);
    int calculateRealSize();
    bool aBiggerThanBInt(int a, int b);
    bool aLessThanBInt(int a, int b);
    bool aBiggerThanBString(string a, string b);
    bool aLessThanBString(string a, string b);
    bool readTheFile();
    void printContent();
    void sortTheContent();
    void sortNumeric(bool(FileSorter::*needsToBeMoved)(int, int));
    void sortString(bool(FileSorter::*needsToBeMoved)(string, string));
    bool contentIsNumeric();
    void convertToNumeric();
};
 
const char FileSorter::ascending[] = "-a";
const char FileSorter::descending[] = "-d";
const char FileSorter::fileDoesNotExist[] = "File doesn't exist!\n";
const char FileSorter::noArguments[] = "No parameters!\n";
const char FileSorter::wrongArgs[] = "Wrong arguments values!\n";
const char FileSorter::wrongArgsNumber[] = "Wrong arguments number!\n";
 
FileSorter::FileSorter()
{
    cout << noArguments;
    exit(0);
}
 
FileSorter::FileSorter(int argsNumber, char *args[])
{
    if (argsNumber != 5) {
        cout << wrongArgsNumber;
        exit(0);
    }
    else {
        *this = FileSorter(args[1], args[2], args[3], args[4]);
    }
}
 
FileSorter::FileSorter(string inputFileName, string outputFileName, string containsStrings, string ascending)
{
    this->inputFileName.append(inputFileName);
    this->outputFileName.append(outputFileName);
    this->containsStringsString.append(containsStrings);
    this->ascendingString.append(ascending);
}
 
FileSorter::~FileSorter()
{
}
 
 
void FileSorter::sortTheFile()
{
    if (!readTheFile()) {
        cout << fileDoesNotExist;
    }
    else {
        readTheFile();
        printContent();
        sortTheContent();
    }
}
 
bool FileSorter::argsAreOk(string fileContent, string sortType) {
    if (fileContent.compare("-s") != 0 && fileContent.compare("-i") != 0)
        return false;
    if (sortType.compare("-a") != 0 && sortType.compare("-d") != 0)
        return false;
    return true;
}
 
int FileSorter::calculateRealSize()
{
    for (int i = 0; i < maxSize; i++)
        if (stringContent[i].empty())
            return i;
    return maxSize;
}
 
bool FileSorter::aBiggerThanBInt(int a, int b)
{
    return (a > b);
}
 
bool FileSorter::aLessThanBInt(int a, int b)
{
    return (a < b);
}
 
bool FileSorter::aBiggerThanBString(string a, string b)
{
    return a.compare(b) > 0;
}
 
bool FileSorter::aLessThanBString(string a, string b)
{
    return a.compare(b) < 0;
}
 
bool FileSorter::readTheFile()
{
    cout << "We are in readTheFile function...\n";
    cout << "InputFileName: [" << inputFileName << "]\n";
    ifstream fin(inputFileName);
    if (!fin.is_open()) {
        return false;
    }
    else {
        for (int i = 0;
            i < maxSize
            && fin >> stringContent[i]
            && !fin.eof();
            i++);
        return true;
    }
}
 
void FileSorter::printContent()
{
    for (int i = 0; i < maxSize && !stringContent[i].empty(); i++) {
        cout << stringContent[i] << endl;
    }
}
 
void FileSorter::sortTheContent()
{
    realSize = calculateRealSize();
    if (contentIsNumeric()) {
        convertToNumeric();
        if (ascendingString.compare(ascending) == 0)
            sortNumeric(&FileSorter::aBiggerThanBInt);
        else
            sortNumeric(&FileSorter::aLessThanBInt);
    }
    else
        if (ascendingString.compare(ascending) == 0)
            sortString(&FileSorter::aBiggerThanBString);
        else
            sortString(&FileSorter::aLessThanBString);
}
 
void FileSorter::sortNumeric(bool (FileSorter::*needsToBeMoved)(int, int))
{
    for (int i = 1; i < realSize; i++) {
        int currentElement = intContent[i];
        int j;
        for (j = i - 1; j > 0 && (this->*needsToBeMoved)(currentElement, intContent[j]); j--)
            intContent[j] = intContent[j - 1];
        intContent[j] = currentElement;
    }
}
 
void FileSorter::sortString(bool (FileSorter::*needsToBeMoved)(string, string))
{
    for (int i = 1; i < realSize; i++) {
        string currentElement = stringContent[i];
        int j;
        for (j = i - 1; j > 0 && (this ->*needsToBeMoved)(currentElement, stringContent[j]); j--)
            stringContent[j] = stringContent[j - 1];
        stringContent[j] = currentElement;
    }
}
 
bool FileSorter::contentIsNumeric()
{
    for (int i = 0; i < maxSize; i++)
        for (int j = 0; (size_t)j < stringContent[i].length(); j++)
            if (stringContent[i].at(j) < '0' || stringContent[i].at(j) > '9')
                return false;
    return true;
}
 
void FileSorter::convertToNumeric()
{
    for (int i = 0; i < maxSize && !stringContent[i].empty(); i++)
        intContent[i] = atoi(stringContent[i].c_str());
}
 
 
int main(int argsNumber, char *args[])
{  
    FileSorter fileSorter(argsNumber, args);
    cout << "Constructor passed...\n";
    fileSorter.sortTheFile();
 
    system("pause"); 
}
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
11.07.2017, 00:14  [ТС]
nd2, а в моем Visual-е куча ошибок (копировала ваш код)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.07.2017, 00:20
Цитата Сообщение от MayaNash Посмотреть сообщение
куча ошибок
Например.
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
11.07.2017, 00:22  [ТС]
nd2, уже решила, уже неактуально. В одном месте в хедере точку с запятой забыла, из-за того они и были.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.07.2017, 00:22
Помогаю со студенческими работами здесь

Ошибка компилятора С2064 в алгоритме
#include &lt;iostream&gt; #include &lt;set&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; using namespace std; int I = 3; bool...

как то очень давно пришлось соорудить маленький скриптик
как то очень давно пришлось соорудить маленький скриптик, и по тому как ума не хватило я его собрал из нескольких. значит требуется простой...

Компьютер очень часто выходит из системы и появляется ошибка на синем фоне
подскажите, в чём причина и как исправить, если компьютер очень часто выходит из системы и появляется ошибка на синем фоне, но не удаётся...

Почему появляется ошибка 200 (деление на 0)?
uses dos,crt; const intNo: byte = $1C; var NewIntOfSysTimer: word; SvInt1C: procedure; NewTick: longint; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru