|
5 / 5 / 1
Регистрация: 21.02.2019
Сообщений: 38
|
||||||||||||||||||||||||||||||||||||
Компиляция нескольких файлов со структурами C++21.02.2019, 18:48. Показов 2473. Ответов 2
Доброго времени суток! Начал работать с разделением программы на файлы и, как следовало ожидать, наткнулся на ошибки.
Реализованы структуры для описания выражений (Expression - чисто виртуальный класс, Number содержит число, BinaryOperation - содержит операцию и оба операнда) Number и BinaryOperation унаследованы от Expression. Также реализован шаблон проектирования посетитель: Visitor - чисто виртуальный класс и PrintVisitor - класс обеспечивающий вывод выражения, унаследован от Visitor. Expression.h:
||=== Build: Debug in Expession1 (compiler: GNU GCC Compiler) ===| Number.h|9|error: expected class-name before '{' token| Number.h|16|error: 'Visitor' has not been declared| Number.h||In member function 'virtual void Number::visit(int*) const':| Number.h|18|error: request for member 'visitNumber' in '* visitor', which is of non-class type 'int'| BinaryOperation.h|8|error: expected class-name before '{' token| BinaryOperation.h|9|error: expected ')' before 'const'| BinaryOperation.h|13|error: 'Expression' does not name a type| BinaryOperation.h|14|error: 'Expression' does not name a type| BinaryOperation.h|26|error: 'Visitor' has not been declared| BinaryOperation.h|37|error: 'Expression' does not name a type| BinaryOperation.h|38|error: 'Expression' does not name a type| BinaryOperation.h||In member function 'double BinaryOperation::evaluate() const':| BinaryOperation.h|19|error: 'left' was not declared in this scope| BinaryOperation.h|19|note: suggested alternative:| note: 'std::left'| - вроде не очень важно (без этого работало в версии без Visitor) BinaryOperation.h|19|error: 'right' was not declared in this scope| BinaryOperation.h|19|note: suggested alternative:| note: 'std::right'| - тоже самое BinaryOperation.h||In member function 'virtual void BinaryOperation::visit(int*) const':| BinaryOperation.h|28|error: request for member 'visitBinaryOperation' in '* visitor', which is of non-class type 'int'| BinaryOperation.h||In destructor 'BinaryOperation::~BinaryOperation()':| BinaryOperation.h|32|error: 'left' was not declared in this scope| BinaryOperation.h|32|note: suggested alternative:| BinaryOperation.h|33|error: 'right' was not declared in this scope| BinaryOperation.h|33|note: suggested alternative:| main.cpp||In function 'int main()':| main.cpp|10|error: no matching function for call to 'BinaryOperation::BinaryOperation(Number *, char, Number*)'| BinaryOperation.h|7|note: candidate: BinaryOperation::BinaryOperation()| BinaryOperation.h|7|note: candidate expects 0 arguments, 3 provided| BinaryOperation.h|7|note: candidate: constexpr BinaryOperation::BinaryOperation(const BinaryOperation&)| BinaryOperation.h|7|note: candidate expects 1 argument, 3 provided| main.cpp|11|error: 'PrintVisitor' was not declared in this scope| main.cpp|12|error: 'visitor' was not declared in this scope| ||=== Build failed: 18 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| На первых парах понятно, что собака зарыта в том, что Visitor не живет без BinaryOperation и Number, а Number и BinaryOperation в свою очередь не могут без Visitor. Не знаю есть ли какой-то порядок компиляции файлов, но если он бы существовал - как его настроить? Бьюсь уже целый день и буду очень рад помощи!
0
|
||||||||||||||||||||||||||||||||||||
| 21.02.2019, 18:48 | |
|
Ответы с готовыми решениями:
2
Компиляция нескольких файлов Компиляция нескольких файлов Компиляция и компоновка нескольких файлов |
|
Just Do It!
|
|
| 21.02.2019, 19:21 | |
|
в таких случаях помогает общее правило:
1. Скомпильте сначала хелловорд. 2. Если гуд, то добавьте туда свою базовую структуру. 3. Если гуд, то добавьте туда одного наследника. 4. Если гуд, то добавьте туда остальных наследников. 5. Если гуд, то в продакшен. 6. Если гуд, то загорать на Мали. 7. Всё.
2
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 21.02.2019, 19:36 | |
Сообщение было отмечено Watsab как решение
Решение
Watsab, здесь циклическая зависимость между Expression.h и Visitor.h. Из Visitor.h убрать подключения Expression.h и заголовочных файлов производных классов, вместо них написать предварительные объявления.
Есть и другие ошибки, но с их исправлением уже не должно возникнуть проблем.
1
|
|
| 21.02.2019, 19:36 | |
|
Помогаю со студенческими работами здесь
3
Компиляция из нескольких файлов класса Компиляция программы из нескольких файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|