s
silkroadAug. 1, 2020, 1:28 p.m.

Ключевое слово class

Всем привет.
Решил так скажем переписать игру сапёр, нашёл на форумах архив 13ого года, и сейчас в ней разбираюсь, что да как и переношу всё к себе.
Дошёл до места где в главном файле sapper.cpp создаю экземпляры классов autorization и registration , что бы связать формы этих классов с главным окном и всё бы хорошо, но почему при объявлении мне обязательно нужно указать ключевое слово class??Стандартный синтаксис не предпологает такое вроде бы?
Тоесть , так не собираеться :
Registration registrationForm; //форма регистрации
Autorization
autorizationForm; //форма авторизации
а так собираеться :
class Registration registrationForm; //форма регистрации
class Autorization
autorizationForm; //форма авторизации
Спасибо.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
7

Добрый день.
Покажите код, где именно указываете class. Хотя это больше похоже на обычный Forward Declaration.

s
pragma once
include
include "ui_MySapper.h"
include "registration.h"
include "Autorization.h"
class MySapper : public QMainWindow
{
Q_OBJECT

public:
MySapper(QWidget *parent = Q_NULLPTR);

private:

Ui::MySapperClass ui;

class Registration * registrationForm;
class Autorization * autorizationForm;
static const int width = 10;
static const int height = 10;
static const int minMineCount = 10;
static const int maxAddMineCount = 5;

QString defaulInfo;

QTimer timer;
QTime mytime{ 0,0,0};

private slots:
void showRegistrationForm();
void autorization();
void startGame();
void secondGone();
};
  1. Используйте диалог вставки программного кода, чтобы разметка кода была, а не вот это, как получилось.
  2. Из этого кода могу сделать только один вывод. То, что находится в заголовочных файлах registration.h и Autorization.h не подключается и определённые в них классы не видятся.
s

Если закоментить include , то ошибка будет такая : C2027(использование неопределённого типа "Autorization").
Если убрать ключевое слово class , то ошибки будет 3 :

Ошибка C2143 синтаксическая ошибка: отсутствие ";" перед "*"(компилируется исходный файл Autorization.cpp) .
Ошибка C4430 отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию(компилируется исходный файл Autorization.cpp) .
Ошибка C2238 непредвиденные лексемы перед ";"(компилируется исходный файл Autorization.cpp) .

Тоесть файл он подключает, но почему мне нужно использовать слово class я не понимаю, кстати в исходниках, с которых я переписываю проект, тоже стоит слово class...

кстати в исходниках, с которых я переписываю проект, тоже стоит слово class...

Замечательный говнокод видимо там написан.

Если закоментить include , то ошибка будет такая : C2027(использование неопределённого типа "Autorization").

Логичное поведение, если убрать файл с объявлением класса

Ошибка C2143 синтаксическая ошибка: отсутствие ";" перед "*"(компилируется исходный файл Autorization.cpp) .
Ошибка C4430 отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию(компилируется исходный файл Autorization.cpp) .
Ошибка C2238 непредвиденные лексемы перед ";"(компилируется исходный файл Autorization.cpp) .

Ну у вас в файл Autorization.cpp некорректный код и битый синтаксис. Правьте Autorization.cpp, чтобы не было этих ошибок.

s

Забыл сообщить что класс Autorization и Registration так же использовали объект класса Sapper , поэтому и там и там был подключен #include Sapper.h
Когда я закомментировал строчку #include Sapper.h в обоих файлах, ошибка исчезла и я стал гуглить, что же это, нашёл про Взаимную зависимость и Предварительно объявление класса.
Но я всё равно не понимаю, почему предварительное объявление собираеться , а подключение через include нет, разве это не вопрос только в ускорении компиляции?

s
  • Aug. 6, 2020, 1:11 a.m.
  • The answer was marked as a solution.

Разобрался,на стаковерфлоу нашел топик и понял почему так происходило .

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Fornex

Let me recommend you a great European Fornex hosting.

Fornex has proven itself to be a stable host over the years.

For Django projects I recommend VPS hosting

Following the link you will receive a 5% discount on shared hosting services, dedicated servers, VPS and VPN

View Hosting
Share on social networks
Donate

The EVILEG project has switched to a non-commercial basis and will develop solely on the enthusiasm of the site creator, the enthusiasm of users, donations and the hosting referral system

Thank you for your support

Available ways to support the project

PayPal

PatreonYandex.MoneyMore
ni

C++ - Test 001. The first program and data types

  • Result:33points,
  • Rating points-10
ni

C++ - Тест 003. Условия и циклы

  • Result:35points,
  • Rating points-10
AK

C++ - Test 005. Structures and Classes

  • Result:66points,
  • Rating points-1
Popular publications in the last 90 Days
Last comments

Qt/C++ - Lesson 027. Polymorphism in Qt by the example of geometric shapes in QGraphicsScene

Ну не видя вашего кода, сказать, где у вас ошибка невозможно. А что касается перетаскивания и разных манипуляций, то можете распотрошить код векторного редактора из этой статьи Qt/C++…
K
  • Kolja
  • May 22, 2022, 6:32 a.m.

Qt/C++ - Lesson 027. Polymorphism in Qt by the example of geometric shapes in QGraphicsScene

Крутой урок! Но как только захотел добавить функцию выделение объекта ( подразумевается перемещение и изменение размера) ничего не получается . Читал что нужно включить флаги ItemIsSelected и It…

Django - Tutorial 023. Like Dislike system using GenericForeignKey

Недостаток GenericForeignKey в том, что они достаточно плохо оптимизируются, поэтому я решил это с помощью кэширования. Собственно говоря, эти проблемы и послужили возникновению специальног…

PyQt5 - Tutorial 009. Using QThread with MoveToThread

Попробуйте принудительно вызывать сигнал started у потока. Это является потокобезопасным. И в данном случае вызов сигнала started должно запустить выполнения метода run, а потом продолжить выпол…
O
  • Otaku
  • May 16, 2022, 11:33 a.m.

PyQt5 - Tutorial 009. Using QThread with MoveToThread

Решение хорошее, сейчас так и делаю. Но все равно остается открытым вопрос подвязки ивента из вне. Проще говоря, не хочется гонять вечный цикл в run, постоянго проверяя изменения очереди (пусть …
Now discuss on the forum
AB

Sorting the added QML elements in the ListModel

I am writing an alarm clock in QML, I am required to sort the alarms in ascending order (depending on the date or time (if there are several alarms on the same day). I've done the sorting …
EK

HTTP server на Qt

Давно было, уже не помню как, но разрулил. Спасибо :)

Django MPTT вывод дерева категорий

Здраствуйте похоже я так и не понял всю суть Django-MPTT батарейки. Так как не могу решить простую задачу с выводом категорий. По этому обращаюсь к вам за помощью. Начну с начала. Изначальн…
AC

QScrollArea и автоматическая прокрутка при обходе элементов формы

Отвечаю сам на свой вопрос. Кому интересно: к примеру в scrollArea_organs_internal есть элементы QLineEdit = spleen_parenchyma (при обходе элементов формы д…
d
  • danya
  • April 26, 2022, 8:13 a.m.

Как вставить видео в QT6 6.3.0?

Я абсолютный новичок в Qt. Столкнулся с проблемой вставки видео. В прошлых версиях надо было подключть к про файлу multimedia. Сейчас пишет ошибку, что multimedia нет. Можете на просто…
About
Services
© EVILEG 2015-2022
Recommend hosting TIMEWEB