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

Как создать объект своего класса во второй форме?

18.11.2016, 22:35. Показов 2450. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В mainwindow.cpp сделал #include своего класса. Все нормально, объекты создаются.
Создал вторую форму. Как в ней создать объект или ссылку на него из первой формы? Пробую делать #include класса в mainwindow2.cpp создаю объект получаю в компиляции ошибки (multiple definition of, first defined here).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2016, 22:35
Ответы с готовыми решениями:

Как создать объект своего класса в билдере?
Написал в билдере класс class Point { public: Point() ; void DrawPoint(float, float);...

Возможно ли создать объект своего класса, который состоит из объектов другого класса?
Возможно ли создать объект своего класса, который состоит из объектов другого класса, например: ...

Как в .settings фале сохранить объект своего класса?
К примеру, есть самописный класс, а в выборе настроек его нет:...

Можно ли создать объект класса с таким же именем как у самого класса?
Можно ли создать объект класса с таким же именем как у самого класса? Ну или как то обойти эту...

10
Заблокирован
19.11.2016, 02:40 2
весь код в студию
0
1 / 1 / 2
Регистрация: 03.04.2013
Сообщений: 48
19.11.2016, 20:57  [ТС] 3
Вот что типа такого

test_a.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef TEST_A_H
#define TEST_A_H
#include <iostream>
 
using namespace std;
class A
{
private:
    int x =100;
 
public:
    void view();
 
 
};
 
void A::view()
{
    cout << x << endl;
}
 
#endif // TEST_A_H
mainwindow.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
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "test_a.h"
 
A A1;
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
 
    A1.view();
 
}
 
void MainWindow::on_pushButton_2_clicked()
{
     ad2 = new MainWindow2;
     ad2->show();
}
Вторая форма mainwindow2.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "mainwindow2.h"
#include "ui_mainwindow2.h"
#include "test_a.h"    //[B] при подключении идет ошибка[/B]
A A2;
 
MainWindow2::MainWindow2(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow2)
{
    ui->setupUi(this);
}
 
MainWindow2::~MainWindow2()
{
    delete ui;
}
 
void MainWindow2::on_pushButton_clicked()
{
    close();
    delete this;
}
mainwindow.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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "mainwindow2.h"
#include <QMainWindow>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
      MainWindow2 *ad2;
 
private slots:
    void on_pushButton_clicked();
 
    void on_pushButton_2_clicked();
 
 
private:
    Ui::MainWindow *ui;
};
 
#endif // MAINWINDOW_H
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
19.11.2016, 21:15 4
Убери подключение в первой форме, оставь во второй.
А это что?
C++
1
delete this;
0
Заблокирован
19.11.2016, 21:19 5
Мне лень читать столько цветных букв подряд
В общем вот тебе хелоу ворлд, где на главной форме есть кнопка для отображения второй формы
Вложения
Тип файла: rar Sources.rar (701.5 Кб, 7 просмотров)
0
Заблокирован
19.11.2016, 21:20 6
Цитата Сообщение от nmcf Посмотреть сообщение
delete this;
Ох лол .... какие же нынче программисты пошли
0
1 / 1 / 2
Регистрация: 03.04.2013
Сообщений: 48
19.11.2016, 21:23  [ТС] 7
Убрал, теперь в первой форме ругается, что не знает класс A и его объект.

Ну это вроде удаляет вторую форму при закрытии, она же через new создается в памяти. по крайней мере деструктор формы срабатывает после этой строки.

Добавлено через 1 минуту
Ну что гугл выдал то и пробую. Проблема то не в этом.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
19.11.2016, 21:24 8
Он должен удаляться извне. В деструктор основной формы вставь удаление.
test_a.h подключи в mainwindow2.h, а mainwindow2.h в mainwindow.h.
0
1 / 1 / 2
Регистрация: 03.04.2013
Сообщений: 48
19.11.2016, 21:39  [ТС] 9
Подключил. Теперь в test_a.h ругается на этот блок.


C++
1
2
3
4
void A::view()
{
    cout << x << endl;
}
Код
In function `Z7qt_noopv': ошибка: multiple definition of `A::view()'
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
19.11.2016, 21:41 10
У тебя должен быть test_a.cpp и там реализации функций-членов.
1
1 / 1 / 2
Регистрация: 03.04.2013
Сообщений: 48
19.11.2016, 21:50  [ТС] 11
Спасибо все пошло. Вот оно оказывается что.
Даже мой вариант пошел, когда в каждом файле подключал. Но я так понял это не верно так делать?
0
19.11.2016, 21:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2016, 21:50
Помогаю со студенческими работами здесь

Создать обЪект класса , у которого в параметрах конструктора объект этого же класса
Вот код: TOgmGraphicsClass = class of TOgmGraphicsBlock; TOgmGraphicsBlock =...

Класс, содержащий объект своего класса
Если класс содержит объект своего класса. Почему при создании объекта такого класса не создается...

Как создать свое событие для своего класса?
Добрый день всем! Подскажите как создать событие для своего класса? Экземпляр класса должен...

Override для метода возвращающего объект своего класса
вопрос №1 Как правильно реализовать переопределение? Компилятор выдаёт следующую ошибку: error...


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

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