Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 04.12.2022
Сообщений: 21

Требуется помощь с ошибкой c2079, не знаю что от меня требуется

18.11.2023, 11:17. Показов 928. Ответов 10

Студворк — интернет-сервис помощи студентам
Сегодня впервые столкнулся с такой проблемой. Каким-то образом конфликтуют классы, в интернете ничего похожего я пока что не нашел.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef TRANSFORM2D_H
#define TRANSFORM2D_H
 
#include <string>
 
#include <glm/glm.hpp>
 
#include "../graphics/fuiscene.h"
#include "../graphics/model2d.h"
 
#include "uiinteractivity.h"
#include "rectboreder2d.h"
 
namespace fui {
    class model2D;
 
    class transform2D {
    public:
        glm::vec2 position;
        glm::vec2 size;
        glm::vec3 rotation;
 
        rectBorder2D border;
        uiinteractivity interactivity;
 
        model2D* model;
        std::string indstanceId;
 
        transform2D(glm::vec2 pos, glm::vec2 size, glm::vec3 rotation, model2D* model, rectBorder2D* modelBoreder, std::string instanceId);
 
        glm::vec2 getPositionInPixels();
        glm::vec2 getSizeInPixels();
 
        void setPositionInPixels(glm::vec2 posInPix);
        void addPositionInPixels(glm::vec2 offsetInPix);
    private:
        rectBorder2D* modelBoreder;
 
        void calculateBoredr();
    };
}
 
#endif // !TRANSFORM2D_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
30
#include "transform2d.h"
 
fui::transform2D::transform2D(glm::vec2 pos, glm::vec2 size, glm::vec3 rotation, model2D* model, rectBorder2D* modelBoreder, std::string instanceId)
    : position(pos), size(size), rotation(rotation), model(model), modelBoreder(modelBoreder), indstanceId(instanceId) {
    calculateBoredr();
    interactivity = uiinteractivity(this);
}
 
glm::vec2 fui::transform2D::getPositionInPixels() {
    float x = (position.x + 1) / 2;
    float y = (position.y + 1) / 2;
    return glm::vec2(x * fui::scene::width, y * fui::scene::height);
}
 
glm::vec2 fui::transform2D::getSizeInPixels() {
    return glm::vec2(size.x * fui::scene::width, size.y * fui::scene::height);
}
 
void fui::transform2D::setPositionInPixels(glm::vec2 posInPix) {
    position = glm::vec2(((posInPix.x / (double)fui::scene::width) - 0.5) * 2, ((posInPix.y / (double)fui::scene::height) - 0.5) * 2);
    calculateBoredr();
}
 
void fui::transform2D::addPositionInPixels(glm::vec2 offsetInPix) {
    setPositionInPixels(getPositionInPixels() + offsetInPix);
}
 
void fui::transform2D::calculateBoredr() {
    border = rectBorder2D(modelBoreder->min * size + position, modelBoreder->max * size + position);
}
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
#ifndef UIINTERACTIVITY_H
#define UIINTERACTIVITY_H
 
#include "../graphics/shader.h"
#include "../graphics/fuiscene.h"
 
#include "transform2d.h"
 
namespace fui {
    class transform2D;
 
    class uiinteractivity {
    public:
        transform2D *instance;
 
        uiinteractivity();
        uiinteractivity(transform2D* transform);
 
        bool isDraggable;
        bool isResizeable;
 
        void update(Shader outlineShader);
        void drag(Shader outlineShader);
    };
}
 
#endif
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
#include "uiinteractivity.h"
 
fui::uiinteractivity::uiinteractivity(){}
 
fui::uiinteractivity::uiinteractivity(transform2D* transform) 
    : instance(transform) {
    isDraggable = true;
    isResizeable = true;
}
 
void fui::uiinteractivity::update(Shader outlineShader) {
    drag(outlineShader);
}
 
void fui::uiinteractivity::drag(Shader outlineShader) {
    if (isDraggable) {
        if (instance->border.isDotInRect(fui::scene::getMousePosInNDC())) {
            float x = Mouse::getDX();
            float y = Mouse::getDY();
            if (instance->border.getDistFromPointToBorder(fui::scene::getMousePosInNDC()) < 0.2)
                instance->model->addToShadersQueue(outlineShader, instance->model->getInstaneIdxById(instance->indstanceId));
            instance->addPositionInPixels(glm::vec2(x, y));
        }
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2023, 11:17
Ответы с готовыми решениями:

Что от меня требуется?
Есть задания по данным предметам - 1. Базы данных 2. Основы программирования 3. Инфокомуникационные системы Сами задания...

Что от меня требуется?
1)&quot;Участникам необходимо будет доработать конфигурацию в версии 8.3.13 в соответствии с заданием. Задание будет связано с формированием...

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

10
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13198 / 6833 / 1822
Регистрация: 18.10.2014
Сообщений: 17,293
18.11.2023, 11:36
Цитата Сообщение от FouRed Посмотреть сообщение
Сегодня впервые столкнулся с такой проблемой.
С какой проблемой? Где в вашем вопросе процитировано полное сообщение об ошибке? Где в вашем вопрсе указана строка, в которой ошибка рапортуется? О чем речь вообще?

Что за код вы привели? Где имена файлов? Разве что мой дар ясновидения подсказывает мне, что заголовочные файлы "transform2d.h" и "uiinteractivity.h" включают друг друга циклически.
0
0 / 0 / 0
Регистрация: 04.12.2022
Сообщений: 21
18.11.2023, 11:45  [ТС]
совсем забыл: error C2079: 'fui::transform2D::interactivity' uses undefined class 'fui::uiinteractivity'
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13198 / 6833 / 1822
Регистрация: 18.10.2014
Сообщений: 17,293
18.11.2023, 12:16
Цитата Сообщение от FouRed Посмотреть сообщение
совсем забыл: error C2079: 'fui::transform2D::interactivity' uses undefined class 'fui::uiinteractivity'
Заголовочные файлы "transform2d.h" и "uiinteractivity.h" включают друг друга циклически.

Вот это

C++
7
#include "transform2d.h"
Зачем было сделано?
0
0 / 0 / 0
Регистрация: 04.12.2022
Сообщений: 21
18.11.2023, 12:38  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Заголовочные файлы "transform2d.h" и "uiinteractivity.h" включают друг друга циклически.
Вот это
C++Выделить код
1
/* 7 */ #include "transform2d.h"
Зачем было сделано?
а без этого никак
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13198 / 6833 / 1822
Регистрация: 18.10.2014
Сообщений: 17,293
18.11.2023, 13:03
Цитата Сообщение от FouRed Посмотреть сообщение
а без этого никак
Это как это "никак"? Строка

C++
10
class transform2D;
как раз свидетельствует о том, что автор кода изначально собирался обойтись без "этого". Но потом вдруг ни с того ни с сего сделал

C++
7
#include "transform2d.h"
то есть устроил циклическое включение.
0
0 / 0 / 0
Регистрация: 04.12.2022
Сообщений: 21
18.11.2023, 13:31  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
как раз свидетельствует о том, что автор кода изначально собирался обойтись без "этого". Но потом вдруг ни с того ни с сего сделал
если Вы предлагаете просто удалить #include "transform2d.h", то тогда откуда будут доступны поля класса из этого файла?
10 строка не создает конфликт, а только его убирает.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13198 / 6833 / 1822
Регистрация: 18.10.2014
Сообщений: 17,293
18.11.2023, 14:07
Цитата Сообщение от FouRed Посмотреть сообщение
если Вы предлагаете просто удалить #include "transform2d.h", то тогда откуда будут доступны поля класса из этого файла?
Поля класса у вас используются только в файле реализации. Вот в файле реализации и надо было делать #include "transform2d.h". А вы сделали включение в заголовочный файл, получив в результате зацикленное включение.

Цитата Сообщение от FouRed Посмотреть сообщение
10 строка не создает конфликт, а только его убирает.
10 строка вообще ничего осмысленного не делает, кроме того, что приводит к "непонятным" сообщениям об ошибках. Что и произошло в вашем случае.
0
0 / 0 / 0
Регистрация: 04.12.2022
Сообщений: 21
18.11.2023, 14:10  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
10 строка вообще ничего осмысленного не делает, кроме того, что приводит к "непонятным" сообщениям об ошибках. Что и произошло в вашем случае.
это forward declaration, почитайте
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
18.11.2023, 14:45
Лучший ответ Сообщение было отмечено FouRed как решение

Решение

FouRed, не понятно чего вы спорите. Вам все правильно говорят.
Перенесите #include "transform2d.h" из uiinteractivity.h в uiinteractivity.cpp.

Добавлено через 23 минуты
FouRed, Error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13198 / 6833 / 1822
Регистрация: 18.10.2014
Сообщений: 17,293
18.11.2023, 16:29
Цитата Сообщение от FouRed Посмотреть сообщение
это forward declaration, почитайте
Почитайте сами. Весь смысл выполнения forward declaration класса как раз и заключается в том, чтобы не включать сюда весь заголовочный файл этого класса. Ибо в ряде случаев включать весь файл просто нельзя (у вас именно так).

А вы и forward declaration сделали, и весь заголовочный файл включили. Результат налицо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2023, 16:29
Помогаю со студенческими работами здесь

Подскажите, что от меня требуется?
Общие указания к выполнению работы. 1. Объединить все лабораторные работы 1 -6 в один большой проект. 2. Для каждой лабораторной работы...

Подскажите, что от меня требуется
Не понял суть задания Для Задания 2 напишите программу, которая вычисляет значение функции от двух аргументов х и у , которая задана...

неполнимаю что вообще от меня требуется)
На пространстве формы изображен календарь за май текущего года с горизонтальным расположением недель. Рамка красного цвета в виде квадрата...

не могу понять что от меня требуется
задачка: Создайте проект, содержащий шаблон-раму, который содержит три компонента: Edit, ListBox, Button. Вставьте созданный шаблон-раму в...

Mathcad, не понимаю что требуется от меня сделать
1. Получить решение уравнения относительно выбранной искомой переменной символьно. 2. Записать аналитическую модель в виде уравнения...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru