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

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

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

Author24 — интернет-сервис помощи студентам
Почему тут появляется эта ошибка?
Заранее спасибо
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2017, 22:36
Ответы с готовыми решениями:

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

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

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

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

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

Ты всё возишься с тем несчастным заказом?
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
10.07.2017, 22:55 4
Цитата Сообщение от daun-autist Посмотреть сообщение
Потому что указатели на методы надо вызывать с привлечением объекта и с использованием соответствующего синтаксиса
Это как?
0
Заблокирован
10.07.2017, 22:59 5
notAll, https://isocpp.org/wiki/faq/pointers-to-members
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.07.2017, 23:02 6
Цитата Сообщение от MayaNash Посмотреть сообщение
C++
1
needsToBeMoved(currentElement, stringContent[j])
C++
1
(this ->*needsToBeMoved)(currentElement, stringContent[j])
1
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:12  [ТС] 7
nd2, я попыталась сделать их статическими... Но ошибок стало еще больше)))
0
Заблокирован
10.07.2017, 23:13 8
MayaNash, сколько ты дерёшь за такую откровенную халтуру?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.07.2017, 23:16 9
Цитата Сообщение от MayaNash Посмотреть сообщение
я попыталась сделать их статическими...
Я, разве, предлагал?
0
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:19  [ТС] 10
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 секунды
Код
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,426
10.07.2017, 23:37 11
Цитата Сообщение от MayaNash Посмотреть сообщение
и скобки ему тоже не нравятся.
Цитата Сообщение от MayaNash Посмотреть сообщение
C++
1
this->(*needsToBeMoved)(currentElement, intContent[j])
...
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
(this ->*needsToBeMoved)(currentElement, stringContent[j])
1
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:42  [ТС] 12
nd2,
Код
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,426
10.07.2017, 23:45 13
Я не вижу: что и как исправлено.
1
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:48  [ТС] 14
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,426
10.07.2017, 23:52 15
MayaNash, внимательно посмотри, как ты пишешь, и как я предлагаю.
1
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 23:54  [ТС] 16
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());
}
Код
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,426
11.07.2017, 00:10 17
Цитата Сообщение от 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
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
11.07.2017, 00:14  [ТС] 18
nd2, а в моем Visual-е куча ошибок (копировала ваш код)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
11.07.2017, 00:20 19
Цитата Сообщение от MayaNash Посмотреть сообщение
куча ошибок
Например.
0
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
11.07.2017, 00:22  [ТС] 20
nd2, уже решила, уже неактуально. В одном месте в хедере точку с запятой забыла, из-за того они и были.
0
11.07.2017, 00:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2017, 00:22
Помогаю со студенческими работами здесь

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru