Форум программистов, компьютерный форум CyberForum.ru

Взаимная агрегация - C++

Восстановить пароль Регистрация
 
wollk
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 142
04.04.2014, 22:14     Взаимная агрегация #1
Здравствуйте, не знал как правильно назвать тему, если ошибся - простите. Пишу симулятор банкомата, есть класс 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
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2014, 22:14     Взаимная агрегация
Посмотрите здесь:

Агрегация в C# C#
Класс строка, класс текст, агрегация C++
Агрегация по ссылке C++
Взаимная зависимость модулей C++
Агрегация ООП C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.04.2014, 22:26     Взаимная агрегация #2
Используйте предварительное объявление:
Вместо
C++
1
#include <card.h>
напишите
C++
1
class Card;
Аналогично во втором варианте.
wollk
1 / 1 / 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();
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.04.2014, 22:33     Взаимная агрегация #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от wollk Посмотреть сообщение
Теперь появилась такая ошибка:
А вот в сишниках уже пишите инклюды там где используете класс:
C++
1
#include <card.h>
и т.д.
Yandex
Объявления
04.04.2014, 22:33     Взаимная агрегация
Ответ Создать тему
Опции темы

Текущее время: 18:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru