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

Почему не изменяется значение члена класса

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

Студворк — интернет-сервис помощи студентам
Инструкция по запуску: <имя.exe> <inputfilename> <outputfilename> <-s|-i> <-a|-d>
В конструкторе (FileSorter.cpp, line 21) я изменяю значение члена класса. Затем вывожу (см. чуть ниже). Но в функции readFile оказывается, что изменения не сохранились. Почему?
Заранее спасибо

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
#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;
    string inputFileName,
        outputFileName,
        containsStringsString,
        ascendingString,
        stringContent[maxSize];
    int intContent[maxSize];
    bool ascending, containsStrings;
    const string fileDoesNotExist = "File doesn't exist!\n",
        noArguments = "No parameters!",
        wrongArgs = "Wrong arguments values!",
        wrongArgsNumber = "Wrong arguments number!\n";
 
    bool argsAreOk(string fileContent, string sortType);
    bool readTheFile();
    void printContent();
    void sortTheContent();
    void sortNumeric();
    void sortString();
    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
#include "FileSorter.h"
 
FileSorter::FileSorter()
{
    cout << noArguments;
    exit(0);
}
 
FileSorter::FileSorter(int argsNumber, char *args[])
{
    if (argsNumber != 5) {
        cout << wrongArgsNumber;
        exit(0);
    }
    else
        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);
 
    cout << "Input parameters: \n"
        << this->inputFileName << endl
        << this->outputFileName << endl
        << this->containsStringsString << endl
        << this->ascendingString << endl;
}
 
FileSorter::~FileSorter()
{
}
 
 
void FileSorter::sortTheFile()
{
    if (!readTheFile()) {
        cout << fileDoesNotExist;
    }
    else {
        readTheFile();
        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;
}
 
bool FileSorter::readTheFile()
{
    cout << "InputFileName: " << inputFileName << endl;
    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; i++)
        cout << stringContent[i] << endl;
}
 
void FileSorter::sortTheContent()
{
    if (contentIsNumeric()) {
        convertToNumeric();
        sortNumeric();
    }
    else
        sortString();
}
 
void FileSorter::sortNumeric()
{
}
 
void FileSorter::sortString()
{
}
 
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()
{
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2017, 19:03
Ответы с готовыми решениями:

Почему изменяется значение переменной между функциями класса?
Почему-то изменяется значение переменной m(кол-во специальностей) в output_spec. Пробовал в других средах покомпилить, но m все равно...

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и прочее //опущены для уменьшения кода ...

почему изменяется и первый экземпляр класса
Почему значение a.m становится равным b.m? Как сделать так, чтобы массив word можно было использовать несколько раз? #include...

22
 Аватар для RunningMan
278 / 186 / 75
Регистрация: 12.04.2017
Сообщений: 1,088
Записей в блоге: 2
10.07.2017, 19:10
Цитата Сообщение от MayaNash Посмотреть сообщение
C++
1
2
3
4
5
FileSorter::FileSorter()
{
cout << noArguments;
 exit(0);
}
Как это понимать? Где логика?
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 19:11  [ТС]
RunningMan, то и значит, что нельзя пустой конструктор вызывать.
В задании было сказано предусмотреть все случаи ошибок))))

Добавлено через 23 секунды
RunningMan, а, сейчас еще caller приложу.
0
Заблокирован
10.07.2017, 19:12
Цитата Сообщение от RunningMan Посмотреть сообщение
Как это понимать?
Что ОП не знает об исключениях.
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 19:13  [ТС]
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();
}
0
 Аватар для RunningMan
278 / 186 / 75
Регистрация: 12.04.2017
Сообщений: 1,088
Записей в блоге: 2
10.07.2017, 19:15
daun-autist, не могу выбрать что есть ОП ? http://lurkmore.to/%D0%9E%D0%9F
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 19:15
Цитата Сообщение от MayaNash Посмотреть сообщение
Но в функции readFile оказывается, что изменения не сохранились.
Цитата Сообщение от MayaNash Посмотреть сообщение
C++
1
cout << "InputFileName: " << inputFileName << endl;
И что выводит?
1
Заблокирован
10.07.2017, 19:17
RunningMan, топикстартер.
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 19:33  [ТС]
nd2,
Миниатюры
Почему не изменяется значение члена класса  
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 19:34  [ТС]
daun-autist, знаю я про исключения. Просто заказ такой. Они еще исключения не проходили.
0
Заблокирован
10.07.2017, 19:39
Цитата Сообщение от MayaNash Посмотреть сообщение
16 FileSorter(args[1], args[2], args[3], args[4]);
Это просто создаёт временный объект.

Цитата Сообщение от MayaNash Посмотреть сообщение
Просто заказ такой.
Ты ещё и заказы берёшь, делая такие элементарные ошибки?
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 19:41  [ТС]
nd2, это я добавила, чтобы было понятно есть ли там еще пробелы какие-нибудь.

daun-autist, спасибо за конструктивность.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 19:57
Вместо этого:
C++
1
FileSorter(args[1], args[2], args[3], args[4]);
сделай инициализацию полей (здесь).
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 20:29  [ТС]
nd2, во-первых, спасибо за конструктивную помощь.
Во-вторых, сейчас попробую.

Добавлено через 2 минуты
nd2, сработало... А почему нельзя передавать? В чем ошибка? Передаются не значения указателей, а что-то другое?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
10.07.2017, 20:36
Цитата Сообщение от MayaNash Посмотреть сообщение
А почему нельзя передавать? В чем ошибка?
потому что вызывать другие конструкторы можно только в списке инициализации конструктора.
Цитата Сообщение от MayaNash Посмотреть сообщение
C++
1
2
3
4
const string fileDoesNotExist = "File doesn't exist!\n",
noArguments = "No parameters!",
wrongArgs = "Wrong arguments values!",
wrongArgsNumber = "Wrong arguments number!\n";
статическими их сделайте.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 20:43
Цитата Сообщение от MayaNash Посмотреть сообщение
В чем ошибка?
...
Цитата Сообщение от daun-autist Посмотреть сообщение
Это просто создаёт временный объект.
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 21:12  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
потому что вызывать другие конструкторы можно только в списке инициализации конструктора.
Блин. Точно. Спасибо

Когда я делаю их статическими, вылезают ошибки. Причем, в большом количестве. Я уже хотела сделать их статическими несколько часов назад))) Сейчас уже вчитаюсь почему они вылезают.

Добавлено через 1 минуту
nd2, до меня не доходит. Я же передавала указатели на массив чар-ов, разве нет? Какая разница, были ли временными эти сами указатели?
0
Заблокирован
10.07.2017, 21:19
Искренне сожалею рискнувшим доверить тебе выполнение заказа.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.07.2017, 21:22
Цитата Сообщение от MayaNash Посмотреть сообщение
Я же передавала указатели на массив чар-ов, разве нет?
Передавала, но в конструктор какого объекта?

Добавлено через 1 минуту
Цитата Сообщение от MayaNash Посмотреть сообщение
Какая разница, были ли временными эти сами указатели?
О временных указателях никто не писал.
Цитата Сообщение от daun-autist Посмотреть сообщение
временный объект
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.07.2017, 21:25  [ТС]
GbaLog-, я снова что-то не поняла.
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
#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;
    string inputFileName,
        outputFileName,
        containsStringsString,
        ascendingString,
        stringContent[maxSize];
    int intContent[maxSize];
    bool ascending, containsStrings;
    static const char fileDoesNotExist[],
        noArguments[],
        wrongArgs[],
        wrongArgsNumber[];
 
    bool argsAreOk(string fileContent, string sortType);
    bool readTheFile();
    void printContent();
    void sortTheContent();
    void sortNumeric();
    void sortString();
    bool contentIsNumeric();
    void convertToNumeric();
};
 
const char FileSorter::fileDoesNotExist[] = "File doesn't exist!\n";
const char FileSorter::noArguments[] = "No parameters!";
const char FileSorter::wrongArgs[] = "Wrong arguments values!";
const char FileSorter::wrongArgsNumber[] = "Wrong arguments number!\n";
Code
1
2
3
4
5
6
7
8
9
10
11
1>------ Перестроение всех файлов начато: проект: Проект1, Конфигурация: Debug Win32 ------
1>FileSorterCaller.cpp
1>FileSorter.cpp
1>Создание кода...
1>FileSorterCaller.obj : error LNK2005: "private: static char const * const FileSorter::fileDoesNotExist" (?fileDoesNotExist@FileSorter@@0QBDB) уже определен в FileSorter.obj
1>FileSorterCaller.obj : error LNK2005: "private: static char const * const FileSorter::noArguments" (?noArguments@FileSorter@@0QBDB) уже определен в FileSorter.obj
1>FileSorterCaller.obj : error LNK2005: "private: static char const * const FileSorter::wrongArgs" (?wrongArgs@FileSorter@@0QBDB) уже определен в FileSorter.obj
1>FileSorterCaller.obj : error LNK2005: "private: static char const * const FileSorter::wrongArgsNumber" (?wrongArgsNumber@FileSorter@@0QBDB) уже определен в FileSorter.obj
1>D:\Заказы\Михаил Хамхоев (VK)\1\Проект1\Debug\Проект1.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
1>Сборка проекта "Проект1.vcxproj" завершена с ошибкой.
========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========
Добавлено через 2 минуты
Переместила определения в .срр, и заработало...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.07.2017, 21:25
Помогаю со студенческими работами здесь

Почему изменяется значение?
Здравствуйте! Есть класс Cell, в котором есть List с именем Genome. Мне надо изменить случайный элемент Cell2, но вместе с ним меняется и...

Не изменяется значение элемента класса
Часть программы: class Saving { public: ... void set(double); double calculate(); double get() const;

Почему значение tellg() не изменяется?
Следующий код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void main() { ifstream file;

Почему изменяется значение сессии
После входа на сайт пользователь получает значение $_SESSION, которое он должен &quot;носить&quot; до конца сессии, я так понимаю. Но при...

Почему изменяется значение переменной?
Помогите новичку. Я пишу простейший код, но в строках 34-38 происходит что-то странное. Переменная i как-будто становится ссылкой и при...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru