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

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

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

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

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

Перезаписыаю в методе 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2017, 00:21
Ответы с готовыми решениями:

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

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

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

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

10
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
22.06.2017, 00:57 2
Цитата Сообщение от 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  [ТС] 3
Цитата Сообщение от 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
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
22.06.2017, 01:16 4
Цитата Сообщение от Eumi Посмотреть сообщение
Player
Не то, player.h покажи.
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.06.2017, 01:22  [ТС] 5
Цитата Сообщение от 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
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
22.06.2017, 01:25 6
И как ты объекты этого класса в файл записываешь?
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.06.2017, 01:29  [ТС] 7
Цитата Сообщение от 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
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
22.06.2017, 01:34 8
Твой класс Player не относится к POD-типу, поэтому не годится для бинарных методов записи/чтения.
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.06.2017, 01:42  [ТС] 9
Цитата Сообщение от nd2 Посмотреть сообщение
Твой класс Player не относится к POD-типу, поэтому не годится для бинарных методов записи/чтения.
Тогда я не понимаю, если "не годится", почему я в отладке вижу что он считал и считал так как я вводила?
Миниатюры
Не перезаписываются ссылки  
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
22.06.2017, 01:54 10
Цитата Сообщение от Eumi Посмотреть сообщение
почему я в отладке вижу что он считал и считал так как я вводила?
Это всё UB. Зависит от реализации std::string, от длины используемых строк, от того: читается ли записанный файл в этой же программе (без выхода из неё), от фазы луны, активности солнца и т.д.

Добавлено через 2 минуты
Запись и чтение структуры с файла
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
22.06.2017, 02:26 11
Eumi, почитай про сериализацию/десериализацию данных
0
22.06.2017, 02:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2017, 02:26
Помогаю со студенческими работами здесь

Pythonanywhere не перезаписываются данные в файле
Создал вебхук на Flask для телеграм бота. Задача написать бота, который выдаёт ДЗ. Храню на...

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

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

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


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

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