я использую VisualStudio 2017, но думаю на 2022 ситуация будет та же. Проблема в следующем. Есть файл include.h в котором находятся все остальные дерективы #include, подключается он в main.cpp. Внутри include.h находятся следующие строки
// тут подключаются библиотеки: OpenGL Imgui и множество других
...
// а дальше идут следующие файлы
#include "Lister.cpp"
#include "Game.cpp"
#include "GameLoop.cpp"
#include "Context.cpp"
#include "ContextLoop.cpp"
Все эти файлы я создавал одним и тем же образом, мышью выбирал "добавить новый элемент" в окне "обозреватель решений". Файлы находятся в корневой папке с main.cpp. Проблема в том, что некоторые файлы, например ContextLoop.cpp, не видят имён, объявленных ранее, таких как классы, прототипы функций, пространств и прочего. Т.е. я беру один и тот же код и вставляю по очереди в Context.cpp а затем в ContextLoop.cpp, в первом случае всё работает, во втором нет, причём IDE не жалуется на то, что какой-то из файлов не удалось подключить.
Я всегда воспринимал #include как описано на официальном сайте microsoft:
Т.е. на место использования дерективы подставляется полное содержание включаемого файла, ну с некоторыми особенностями работы #pragma once и другими файлозависимыми директивами.
Но как оказалось, есть что-то ещё, что определяет область видимости внутри включаемого файла. P.S. если определить в ContextLoop.cpp, файле, в котором ничего не видно, любую переменную, то из main.cpp и include.h её будет видно, когда как переменной из include.h внутри ContextLoop.cpp видно не будет, но в других файлах видно будет.
Есть догадка, что это как-то зависит от .vcxproj файлов проекта.
.vcxproj"до" и "после", где с "до" не работает, а с "после" работает. Внутри файлов небольшие отличия, но именно они отвечают за то, будет ли компилироваться проект, при этом отличия никак не заметны из самой IDE. Чуть позже возможно кратко сформулирую, что это за отличия такие. Да, расширение файлов тут не причём, есть внутренние стейты VS, влияющие на их свойства. – ATtiny13a -PU Jan 22 '24 at 11:30main.cpp(в котором доступны все необходимые объявления за счёт вашегоinclude), но и остальныеcpp-файлы, в которых, судя по всему, нет необходимых включений. Обычно включают заголовочные файлы вcpp-файлы, а не наоборот. Поищите какие-нибудь примеры работы с заголовочными файлами. – wololo Jan 22 '24 at 11:36#include <>и тогда проблем не будет. Сейчас у меня проект без изменения кода с разными.vcxprojлибо компилируется, либо нет. Даже названия файлов не менял. Попробую в битом.vcxprojпрописать пути в окружение. – ATtiny13a -PU Jan 22 '24 at 11:47#include <>внутри каждого.cpp, вместо#include ""помогло, буду всегда так делать, спасибо. – ATtiny13a -PU Jan 22 '24 at 12:01