2 / 2 / 0
Регистрация: 17.02.2013
Сообщений: 142
1

Взаимная агрегация

04.04.2014, 22:14. Показов 1937. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не знал как правильно назвать тему, если ошибся - простите. Пишу симулятор банкомата, есть класс Card и User.
Пользователь имеет карту, в интерфейсе класса User я пишу Card *card;
Чтобы когда карта вставлялась в картридер, я мог получить информацию о пользователей, в интерфейсе я пишу User *user.
Проблема в том, что классы описаны в различных модулях.... файлах.
И получается такая вот ошибка

Код
\user.h:13: ошибка: 'Card' does not name a type
     Card *card;
     ^
\user.h:23: ошибка: 'Card' does not name a type
     Card *get_card();
     ^
Кликните здесь для просмотра всего текста
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
#ifndef USER_H
#define USER_H
 
#include <QString>
#include <card.h>
 
class User{
private:
    int id;
    QString surname;
    QString name;
    QString patronomic;
    Card *card;
public:
    void set_id(int id);
    void set_surname(QString surname);
    void set_name(QString name);
    void set_patronomic(QString patronomic);
    int get_id();
    QString get_surname();
    QString get_name();
    QString get_patronomic();
    Card *get_card();
    User(int id);
};
 
#endif // USER_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
#ifndef CARD_H
#define CARD_H
 
#include <QPixmap>
#include <QString>
 
#include "user.h"
 
class Card
{
public:
    //User *user;
    QString number;
    QString pin;
    QPixmap image;
    //Card(User *user);
    Card();
    //void set_user(User *user);
    void set_number(QString number);
    void set_pin(QString pin);
    void set_image(QPixmap image);
    //User* get_user();
    QString get_number();
    QString get_pin();
    QPixmap get_image();
};
 
#endif // CARD_H
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2014, 22:14
Ответы с готовыми решениями:

Взаимная зависимость модулей
// module.h #ifndef module #define module #include &quot;module 2.h&quot; struct A { B b;

Агрегация по ссылке
Здравствуйте! Изучаю агрегацию по ссылке. Ошибка такая: 'B::m_b': function call missing argument...

Классы и агрегация
Всем привет. Ребята, может кто дать рабочие примеры агрегации в классах) Буду очень благодарен, а...

Композиция/Агрегация
Не понимаю четкой разницы между этими понятиями. Нашел тему на форуме...

3
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.04.2014, 22:26 2
Используйте предварительное объявление:
Вместо
C++
1
#include <card.h>
напишите
C++
1
class Card;
Аналогично во втором варианте.
1
2 / 2 / 0
Регистрация: 17.02.2013
Сообщений: 142
04.04.2014, 22:29  [ТС] 3
Теперь появилась такая ошибка:
Код
\user.cpp:6: ошибка: invalid use of incomplete type 'class Card'
     this->card = new Card();
                           ^
user.h:5: ошибка: forward declaration of 'class Card'
 class Card;
       ^
                           ^
C++ (Qt)
1
2
3
4
5
User::User(int id)
{
    this->set_id(id);
    this->card = new Card();
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.04.2014, 22:33 4
Лучший ответ Сообщение было отмечено wollk как решение

Решение

Цитата Сообщение от wollk Посмотреть сообщение
Теперь появилась такая ошибка:
А вот в сишниках уже пишите инклюды там где используете класс:
C++
1
#include <card.h>
и т.д.
1
04.04.2014, 22:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2014, 22:33
Помогаю со студенческими работами здесь

Агрегация ООП
Здравствуйте. Помогите разобраться с одной деталью. Вот код:#include &lt;iostream&gt; #include &lt;conio.h&gt;...

Агрегация по ссылке
Надо описать наследование классов используя агрегацию по ссылке, текст программы я написал, н...

Взаимная блокировка приложений с использованием семафоров
Доброго времени суток всем! Имеется такое задание: Искусственно создать взаимную блокировку...

Не понимаю вырезку из книги (Взаимная блокировка)
Читаю книгу Энтони Уильямся &quot;Паралельное программирование на С++&quot;. Но я не совсем понимаю...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru