Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60

Не перезаписываются ссылки

22.06.2017, 00:21. Показов 499. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер! помоги, пожалуйста.

Вычитываю из файла значения, и хочу переписать вектор ссылок на новый. Но! когда встаю в отладке на выходе из метода все хорошо, но в момент когда я пытаюсь обратиться к ним, для вывода на экран. Приложение крашиться. В отладке видно, что элемент есть, но значения полей некорректные. Подскажите, что я делаю не так?

Перезаписыаю в методе void Coordinator::loadFromFile()
Обращаюсь по методу QTableWidgetItem* Coordinator::getFio(int playerNumber)

Кликните здесь для просмотра всего текста
C++ (Qt)
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
Coordinator::Coordinator()
{
    footballTeam = new Team();
}
 
void Coordinator::addPlayerToTeam(Player *aPlayer){
    footballTeam->addPlayerToTeam(aPlayer);
}
 
int Coordinator::getTeamSize()
{
    return footballTeam->getSizeTeam();
}
 
QTableWidgetItem* Coordinator::getFio(int playerNumber)
{
    QTableWidgetItem *fioWidget = new QTableWidgetItem(QString::fromStdString(footballTeam->getPlayer(playerNumber)->getFio()));
    return fioWidget;
}
 
QTableWidgetItem* Coordinator::getBirthDay(int playerNumber)
{
    QTableWidgetItem *birthDayWidget = new QTableWidgetItem(QString::fromStdString(footballTeam->getPlayer(playerNumber)->getBirthDay()));
    return birthDayWidget;
}
 
QTableWidgetItem* Coordinator::getTeamRole(int playerNumber)
{
    QTableWidgetItem *teamRoleWidget = new QTableWidgetItem(QString::fromStdString(footballTeam->getPlayer(playerNumber)->getTeamRole()));
    return teamRoleWidget;
}
 
QTableWidgetItem* Coordinator::getPlayedGames(int playerNumber)
{
    QTableWidgetItem *playedGamesWidget = new QTableWidgetItem(QString::number(footballTeam->getPlayer(playerNumber)->getNumberPlayedGames()));
    return playedGamesWidget;
}
 
QTableWidgetItem* Coordinator::getWonGames(int playerNumber)
{
    QTableWidgetItem *wonGamesWidget = new QTableWidgetItem(QString::number(footballTeam->getPlayer(playerNumber)->getNumberWinGames()));
    return wonGamesWidget;
}
 
QTableWidgetItem* Coordinator::getTeamNumber(int playerNumber)
{
    QTableWidgetItem *teamNumberWidget = new QTableWidgetItem(QString::number(footballTeam->getPlayer(playerNumber)->getTeamNumber()));
    return teamNumberWidget;
}
 
void Coordinator::loadFromFile()
{
    ifstream file("team.txt", std::ios::binary);
    size_t count = 0;
    file.read(reinterpret_cast<char*>(&count), sizeof(size_t));
    footballTeam->teamClear();
    for (int i=0; i<count; ++i)
    {
        Player testPlayer;
        file.read(reinterpret_cast<char*>(&testPlayer), sizeof(testPlayer));
        footballTeam->addPlayerToTeam(&testPlayer);
    }
    file.close();
}


Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include "team.h"
#include <player.h>
#include <QDebug>
#include <algorithm>
 
Team::Team()
{
    teamList.reserve(10);
}
 
Team::~Team()
{
 
}
 
vector<Player*> Team::getTeamList() const
{
    return teamList;
}
 
Player* Team::getPlayer(int playerNumber)
{
    return teamList[playerNumber];
}
 
int Team::getSizeTeam() const
{
    return teamList.size();
}
 
void Team::sortTeam()
{
    qDebug()<<"Sort!";
    sort(teamList.begin(), teamList.end(), [](const Player* p1, const Player* p2) -> bool { return p1->getTeamNumber() < p2->getTeamNumber() ; });
 
}
 
void Team::setTeamList(const vector<Player *> &value)
{
    teamList = value;
}
 
void Team::teamClear()
{
    teamList.clear();
}
 
void Team::addPlayerToTeam(Player *aPlayer){
    teamList.push_back(aPlayer);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.06.2017, 00:21
Ответы с готовыми решениями:

Не перезаписываются данные в БД
&lt;? switch($act){ // Пользователи case&quot;modify_users&quot;: switch($do) { default: echo&quot;&lt;li&gt; &lt;a...

Не перезаписываются данные в бд
Здравствуйте. Возникла такая проблема. Ранее создал таблицу в бд для добавления новостей. В дальнейшем создал таблицу category , чтобы...

Почему перезаписываются данные?
Подкинули очень простенькую программу, но я не могу понять, почему данные в памяти, сохраненные под переменной globalArray перезаписываются...

10
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
22.06.2017, 00:57
Цитата Сообщение от Eumi Посмотреть сообщение
хочу переписать вектор ссылок на новый
Вектор указателей?

Цитата Сообщение от Eumi Посмотреть сообщение
C++ (Qt)
1
2
3
4
5
6
for (int i=0; i<count; ++i) 
{ 
      Player testPlayer; 
      file.read(reinterpret_cast<char*>(&testPlayer), sizeof(testPlayer)); 
      footballTeam->addPlayerToTeam(&testPlayer); 
}
Сохраняешь адрес локального объекта, который исчезает в конце итерации цикла.

Добавлено через 3 минуты
И что из себя представляет класс Player?
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.06.2017, 01:05  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Сохраняешь адрес локального объекта, который исчезает в конце итерации цикла.

И что из себя представляет класс Player?

как же быть? если мне надо считать N объектов

Player

Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include "player.h"
#include <algorithm>
#include <fstream>
 
Player::Player(QTextEdit *debugEdit)
{
    debugEdit->append("Работает конструктор сущности Player");
}
 
Player::Player()
{
 
}
 
Player::~Player()
{
 
}
 
int Player::getNumberPlayedGames() const
{
    return numberPlayedGames;
}
 
void Player::setNumberPlayedGames(int value)
{
    numberPlayedGames = value;
}
 
int Player::getNumberWinGames() const
{
    return numberWinGames;
}
 
void Player::setNumberWinGames(int value)
{
    numberWinGames = value;
}
 
int Player::getTeamNumber() const
{
    return teamNumber;
}
 
void Player::setTeamNumber(int value)
{
    teamNumber = value;
}
 
string Player::getTeamRole() const
{
    return teamRole;
}
 
void Player::setTeamRole(const string &value)
{
    teamRole = value;
}
 
string Player::getBirthDay() const
{
    return birthDay;
}
 
void Player::setBirthDay(const string &value)
{
    birthDay = value;
}
 
string Player::getFio() const
{
    return fio;
}
 
void Player::setFio(const string &value)
{
    fio = value;
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
22.06.2017, 01:16
Цитата Сообщение от Eumi Посмотреть сообщение
Player
Не то, player.h покажи.
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.06.2017, 01:22  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Не то, player.h покажи.
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#ifndef PLAYER_H
#define PLAYER_H
#include <string>
#include <QTextEdit>
#include <algorithm>
 
using namespace std;
 
class Player
{
public:
    Player(QTextEdit *debugEdit);
    Player();
    ~Player();
    int getNumberPlayedGames() const;
    void setNumberPlayedGames(int value);
 
    int getNumberWinGames() const;
    void setNumberWinGames(int value);
 
    int getTeamNumber() const;
    void setTeamNumber(int value);
 
    string getTeamRole() const;
    void setTeamRole(const string &value);
 
    string getBirthDay() const;
    void setBirthDay(const string &value);
 
    string getFio() const;
    void setFio(const string &value);
    string playerToString();
 
private:
    string fio;
    string birthDay;
    string teamRole;
    int teamNumber;
    int numberWinGames;
    int numberPlayedGames;
};
 
#endif // PLAYER_H
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
22.06.2017, 01:25
И как ты объекты этого класса в файл записываешь?
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.06.2017, 01:29  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
И как ты объекты этого класса в файл записываешь?
Считывается вроде нормально, в отладке объект корректный.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
void Coordinator::saveToFile()
{
    ofstream out("team.txt",ios::binary|ios::out);
    size_t count = footballTeam->getTeamList().size();
    out.write((char*)(&count), sizeof(int));
    for (int i = 0; i<footballTeam->getSizeTeam(); i++){
        out.write(reinterpret_cast<char*>(footballTeam->getPlayer(i)), sizeof(*(footballTeam->getPlayer(i))));
    }
    out.close();
    helper->setSaveList(footballTeam->getTeamList());
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
22.06.2017, 01:34
Твой класс Player не относится к POD-типу, поэтому не годится для бинарных методов записи/чтения.
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.06.2017, 01:42  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Твой класс Player не относится к POD-типу, поэтому не годится для бинарных методов записи/чтения.
Тогда я не понимаю, если "не годится", почему я в отладке вижу что он считал и считал так как я вводила?
Миниатюры
Не перезаписываются ссылки  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
22.06.2017, 01:54
Цитата Сообщение от Eumi Посмотреть сообщение
почему я в отладке вижу что он считал и считал так как я вводила?
Это всё UB. Зависит от реализации std::string, от длины используемых строк, от того: читается ли записанный файл в этой же программе (без выхода из неё), от фазы луны, активности солнца и т.д.

Добавлено через 2 минуты
Запись и чтение структуры с файла
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.06.2017, 02:26
Eumi, почитай про сериализацию/десериализацию данных
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2017, 02:26
Помогаю со студенческими работами здесь

Перезаписываются значения в массиве
Добрый день! Подскажите пожалуйста, почему перезаписываются значения в массиве и как тут лучше делать. Массив получаю чтением из...

Pythonanywhere не перезаписываются данные в файле
Создал вебхук на Flask для телеграм бота. Задача написать бота, который выдаёт ДЗ. Храню на pythonanywhere index() @app.route('/',...

Почему перезаписываются предыдущие экземляры
Проблема в том что всем предыдущим полям присваивается значение последнего(надеюсь что ясно выразился) Вот код: #include...

Не перезаписываются тхт файлы под Windows 7 x64
здравствуйте, проблема возможно банальна или имеет тривиальное решение, но я его пока что не нашел... пишу в VS2005 версия Framework 4,...

Запись числового массива в файл: элементы перезаписываются, а должны добавляться
Подскажите, пожалуйста, как записать массив чисел в файл? У меня каждое последующее число перезаписывает предыдущее, а нужно, чтоб весь...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
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. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru