s
Aug. 1, 2020, 11:28 p.m.

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

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

2

Do you like it? Share on social networks!

7
Evgenii Legotckoi
  • Aug. 3, 2020, 3:09 p.m.

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

    s
    • Aug. 4, 2020, 3:49 p.m.
    • (edited)
    1. pragma once
    2. include
    3. include "ui_MySapper.h"
    4. include "registration.h"
    5. include "Autorization.h"
    6. class MySapper : public QMainWindow
    7. {
    8. Q_OBJECT
    9.  
    10. public:
    11. MySapper(QWidget *parent = Q_NULLPTR);
    12.  
    13. private:
    14.  
    15. Ui::MySapperClass ui;
    16.  
    17. class Registration * registrationForm;
    18. class Autorization * autorizationForm;
    19. static const int width = 10;
    20. static const int height = 10;
    21. static const int minMineCount = 10;
    22. static const int maxAddMineCount = 5;
    23.  
    24. QString defaulInfo;
    25.  
    26. QTimer timer;
    27. QTime mytime{ 0,0,0};
    28.  
    29. private slots:
    30. void showRegistrationForm();
    31. void autorization();
    32. void startGame();
    33. void secondGone();
    34. };
      Evgenii Legotckoi
      • Aug. 4, 2020, 6:19 p.m.
      1. Используйте диалог вставки программного кода, чтобы разметка кода была, а не вот это, как получилось.
      2. Из этого кода могу сделать только один вывод. То, что находится в заголовочных файлах registration.h и Autorization.h не подключается и определённые в них классы не видятся.
        s
        • Aug. 5, 2020, 2:50 a.m.
        • (edited)

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

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

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

          Evgenii Legotckoi
          • Aug. 5, 2020, 3:07 p.m.

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

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

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

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

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

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

            s
            • Aug. 5, 2020, 11:38 p.m.

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

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

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

                Comments

                Only authorized users can post comments.
                Please, Log in or Sign up
                • Last comments
                • AK
                  April 1, 2025, 11:41 a.m.
                  Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                • Evgenii Legotckoi
                  March 9, 2025, 9:02 p.m.
                  К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                • VP
                  March 9, 2025, 4:14 p.m.
                  Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
                • ИМ
                  Nov. 22, 2024, 9:51 p.m.
                  Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                • Evgenii Legotckoi
                  Oct. 31, 2024, 11:37 p.m.
                  Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup