Сообщение от PeterVl
Просто я думал, что разница во времени компиляции не настолько ощутима.
когда ты пишешь в своём хедере:
этот заголовок в свою очередь подтягивает другие заголовки.
а те — ещё какие то.
в результате, там сверху прицепляются тонны библиотечного и не очень кода.
и все эти тонны компилятору приходится парсить каждый раз заново для каждой очередной cpp
если проект маленький, всего из нескольких файликов,
то на скорость компиляции действительно можно забить.
однако, на практике, проекты имеют свойство разрастаться.
и по мере их роста, скорость компиляции все ощутимее и ощутимее даёт о себе знать.
просто представь себе, сколько всякого хлама тянет за собой
единственное включение: #include <conditional_variable>
распечатка заголовков
Код
1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecondition_variable 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xthread 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xthrcommon.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeyvals.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexkeycheck.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecrtdefs.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludesal.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeConcurrencySal.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevadefs.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeuse_ansi.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xtime 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xtimec.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrttime.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wtime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xthreads.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludelimits.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludetuple 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludenew 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeexception 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludetype_traits 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexstddef 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstddef 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtstddef.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstdlib 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtstdlib.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_search.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wstdlib.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeinitializer_list 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludextr1common 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtmalloc.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_exception.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeeh.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_terminate.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_new.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexutility 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeclimits 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeutility 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeiosfwd 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstdio 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtstdio.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wstdio.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_stdio_config.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstring 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtstring.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_memory.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_memcpy_s.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrterrno.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_string.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wstring.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecwchar 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtwchar.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wconio.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wctype.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wdirect.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wio.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_share.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wprocess.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtsys/stat.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtsys/types.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcrtdbg.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_new_debug.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludemutex 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludechrono 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludelimits 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeymath.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecfloat 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtfloat.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecmath 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtmath.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludextgmath.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincluderatio 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludestdint.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludefunctional 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexfunctional 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexstring 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexmemory0 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstdint 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexatomic0.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludesetjmp.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeimmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludewmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludenmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludesmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludetmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludepmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeemmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludemmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeammintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludetypeinfo 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_typeinfo.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludesystem_error 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecerrno 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludestdexcept 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethread 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludememory 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexmemory
отступы показывают вложенность.
кто кого дополнительно прицепил.
если у тебя там парочка файлов — пофигу.
но если их уже сотни — как то не круто получается в 100й раз парсить весь этот хлам.
есть два решение проблемы компиляции:
1. профилактический
в хедерах изначально только и только самый необходимый минимум.
по возможности везде стараемся обойтись forward declaration,
избегая до последнего включения других хедеров.
в спп подтягиваем только необходимый минимум хедеров.
2. предварительно скомпилированный заголовок.
pch — вундервафля компиляторов ц++.
кардинальным образом решает проблему избыточного включения заголовков,
и как следствия — медленной компиляции.
оба способа друг другу не мешают.
использовать оба варианта в работе — признак годного профессионализма.
Добавлено через 9 минут
Сообщение от neit95
Там схема не сложная: ищем все включения
вы там полноценный сишный препроцессор что ли запилили?
или как именно вы умыдряетесь найти все включения?
простой пример:
C++ | ||
|
учитывая «препроцессорную сложность»,
возникли закономерные вопросы:
как именно вы ищете все включения?
что конкретно ты подразумевал под словами: «схема не сложная» ?
Сообщение от neit95
коментим первое, компилим. Если скомпилировалось — значит лишнее. И так со всеми.
сколько часов по времени занимает проверка проекта среднего размера, по такой схеме?
допустим, среднее время сборки небольшой библиотеки — 1.20 минут.
допустим, в ней используется порядка 100 разных заголовков,
львиная часть которых описана в pch.h,
изменение которого, как известно,
приводит к полному ребилду всего проекта.
итого: 2 часа на сверку 100 заголовков.
как то не очень круто, да?
- [x ] I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
- [x ] I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
- [x ] I have searched the issue tracker for a similar issue and not found a similar issue.
Environment
- Development Kit: ESP32-Wrover-Kit
- Kit version (for WroverKit): [v1|v2|v3|v4]
- Module or chip used: [ESP32-WROOM-32]
- IDF version (run
git describe --tags
to find it):
// v3.2-dev-1148-g96cd3b75c - Build System: [Make|CMake]
- Compiler version (run
xtensa-esp32-elf-gcc --version
to find it):
// 1.22.0-80-g6c4433a - Operating System: [Windows]
- Power Supply: [USB]
Problem Description
I am using Visual Studio 2017 to build projects for ESP32, anyway it keeps me warning me about the following possible error :
STRUCT_AFIELD_A(char,1,XCHAL_CP1_SA_ALIGN,CS_SA_,cp1,XCHAL_CP1_SA_SIZE)
Error (active) E0070 incomplete type is not allowed Sketch2 c:UsersYordanAppDataLocalarduino15packagesesp32hardwareesp321.0.0toolssdkincludeesp32xtensaxtruntime-core-state.h 166
and this reapeats for all of the follows :
STRUCT_AFIELD_A(char,1,XCHAL_CP0_SA_ALIGN,CS_SA_,cp0,XCHAL_CP0_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP1_SA_ALIGN,CS_SA_,cp1,XCHAL_CP1_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP2_SA_ALIGN,CS_SA_,cp2,XCHAL_CP2_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP3_SA_ALIGN,CS_SA_,cp3,XCHAL_CP3_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP4_SA_ALIGN,CS_SA_,cp4,XCHAL_CP4_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP5_SA_ALIGN,CS_SA_,cp5,XCHAL_CP5_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP6_SA_ALIGN,CS_SA_,cp6,XCHAL_CP6_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP7_SA_ALIGN,CS_SA_,cp7,XCHAL_CP7_SA_SIZE)
The projects compile without problem, but this is sitting there all the time.
I am just posting it in just-in-case scenario.
Expected Behavior
unknown
Actual Behavior
unknown
Steps to repropduce
- Install Arduino Studio.
- Install Visual Studio 2017.
- install «VisualMicro» plugin.
- Try to build any project and check the Error list.
- [x ] I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
- [x ] I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
- [x ] I have searched the issue tracker for a similar issue and not found a similar issue.
Environment
- Development Kit: ESP32-Wrover-Kit
- Kit version (for WroverKit): [v1|v2|v3|v4]
- Module or chip used: [ESP32-WROOM-32]
- IDF version (run
git describe --tags
to find it):
// v3.2-dev-1148-g96cd3b75c - Build System: [Make|CMake]
- Compiler version (run
xtensa-esp32-elf-gcc --version
to find it):
// 1.22.0-80-g6c4433a - Operating System: [Windows]
- Power Supply: [USB]
Problem Description
I am using Visual Studio 2017 to build projects for ESP32, anyway it keeps me warning me about the following possible error :
STRUCT_AFIELD_A(char,1,XCHAL_CP1_SA_ALIGN,CS_SA_,cp1,XCHAL_CP1_SA_SIZE)
Error (active) E0070 incomplete type is not allowed Sketch2 c:UsersYordanAppDataLocalarduino15packagesesp32hardwareesp321.0.0toolssdkincludeesp32xtensaxtruntime-core-state.h 166
and this reapeats for all of the follows :
STRUCT_AFIELD_A(char,1,XCHAL_CP0_SA_ALIGN,CS_SA_,cp0,XCHAL_CP0_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP1_SA_ALIGN,CS_SA_,cp1,XCHAL_CP1_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP2_SA_ALIGN,CS_SA_,cp2,XCHAL_CP2_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP3_SA_ALIGN,CS_SA_,cp3,XCHAL_CP3_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP4_SA_ALIGN,CS_SA_,cp4,XCHAL_CP4_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP5_SA_ALIGN,CS_SA_,cp5,XCHAL_CP5_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP6_SA_ALIGN,CS_SA_,cp6,XCHAL_CP6_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP7_SA_ALIGN,CS_SA_,cp7,XCHAL_CP7_SA_SIZE)
The projects compile without problem, but this is sitting there all the time.
I am just posting it in just-in-case scenario.
Expected Behavior
unknown
Actual Behavior
unknown
Steps to repropduce
- Install Arduino Studio.
- Install Visual Studio 2017.
- install «VisualMicro» plugin.
- Try to build any project and check the Error list.
В такой ситуации вам надо принять волевое решение о том, какой тип (и, соответственно, заголовок) считать более низкоуровневым, а какой — более высокоуровневым. При включении заголовочных файлов, разрешается включать только более низкоуровневые заголовки в более высокоуровневые заголовки, но не наоборот. При необходимости упомянуть в низкоуровневом заголовке тип из более высокоуровневого заголовка просто делается предварительное объявление типа.
Например, в вашем случае естественно было бы считать тип Elements
и заголовок Elements.h
более низкоукровневым, а тип Game
и заголовок Game.h
— более высокоуровневым.
В такой ситуации в заголовочном файле Elements.h
мы делаем предварительное объявление класса Game
, но Game.h
в Elements.h
ни в коем случае не включаем
// Elements.h
#ifndef ELEMENTS_H_
#define ELEMENTS_H_
class Game; // Предварительное объявление высокоуровневого типа
class Elements
{
...
friend class Game;
Game *_thisGame;
void setGamePtr(Game *game);
void foo();
...
};
#endif /* ELEMENTS_H_ */
А заголовочный файл Game.h
реализуем «обычным» образом, т.е. ни о чем не беспокоясь включаем в него Elements.h
// Game.h
#ifndef GAME_H_
#define GAME_H_
#include <vector>
#include "Elements.h"
class Game
{
...
public:
int _gameInt;
void setup();
std::vector<Elements*> _elements;
...
};
#endif /* GAME_H_ */
Далее, в файл реализации Elements.cpp
спокойно включаем все, что нам нужно, т.е. и Elements.h
, и Game.h
// Elements.cpp
#include "Elements.h"
#include "Game.h"
...
void Elements::setGamePtr(Game *game)
{
_thisGame = game;
}
...
void Elements::foo()
{
...
(*_thisGame)->_gameInt = 5;
...
}
А в Game.cpp
достаточно включить Game.h
(но ничего страшного не случится, если вы включите и Elements.h
тоже)
// Game.cpp
#include "Game.h"
...
void Game::setup()
{
...
for (auto it = _elements.begin(); it != _elements.end(); it++) (*it)->setGamePtr(this);
...
}
Вот и все.
При этом у вас есть полная свобода в реализации класса Game
— вы можете реализовывать его методы где угодно, в т.ч. в Game.h
, т.е. можете обойтись без Game.cpp
вообще. Также вы можете содержать в классе Game
подобъекты класса Element
, то есть напрямую, а не через указатель.
А вот с классом Elements
у вас будут ограничения — полным типом тип Game
будет являться только в Elements.cpp
и все методы, требующие полноты типа Game
придется реализовывать именно там. То есть класс Elements
может содержать только непрямые ссылки (указатели) на класс Game
.
При таком разбиении вы не можете реализовывать методы Elements
, работающие с Game
, как inline функции. Но при необходимости и это достижимо заведением дополнительного включаемого файла.
#c #visual-studio
Вопрос:
Я использую сообщество Visual studio 2019 , проект ue4 из исходного кода. Я использую html5, уже протестированную сборку ungine, это нормально.
Я проект выживания, у меня ошибка:
Severity Code Description Project Path File Line Suppression State
Error (active) E0070 incomplete type is not allowed SurvivalGame F:APPSrocket-craftrocket-craftversions4.24-SurvivalEpicSurvivalGameSeries-4.24SurvivalGameSourceSurvivalGame F:APPSrocket-craftrocket-craftversions4.24-SurvivalEpicSurvivalGameSeries-4.24SurvivalGameSourceSurvivalGameSTypes.h 87
Кодовая Строка:
// error mark
PointDamageEvent.DamageTypeClass = DamageTypeClass ? DamageTypeClass : UDamageType::StaticClass();
Исходная ошибка происходит из сборки emscripten, но в любом случае даже в visual studio, когда я открываю критический файл, я вижу тот же журнал ошибок.
Я не опытный программист на c ! Как избежать этого любого предложения …
Весь остальной код выглядит так :
Это случайная строка из проекта
void ASBaseCharacter::FellOutOfWorld(const class UDamageTypeamp; DmgType)
/* Fallback to default DamageType if none is specified */
UDamageType const* const DamageType = DamageEvent.DamageTypeClass ? DamageEvent.DamageTypeClass->GetDefaultObject<UDamageType>() : GetDefault<UDamageType>();
Die(Health, FDamageEvent(UDamageType::StaticClass()), Killer, nullptr);
UCLASS()
class SURVIVALGAME_API USDamageType : public UDamageType
TSubclassOf<UDamageType> PunchDamageType;
etc...
Комментарии:
1. Эта ошибка обычно означает, что вы отправляете объявление класса/структуры, но никогда не включаете для него фактический исходный файл. Включен ли заголовок для
DamageTypeClass
включения?2. Это ue4 , я не уверен, я уверен, что
#include <utility>
это не решение (из stackoverflow) …3. Он жалуется на
SurvivalGame
класс. Проверьте, есть ли у вас там какие-либо прямые объявления. Это утверждения типаclass Something;
илиstruct SomethingElse;
, как правило, в вашем заголовочном файле. Убедитесь, что все эти вещи затем#include
включены в ваш cpp4. Да, это было простое исправление, я просто смотрю аналогичную ситуацию в других файлах, и сборка теперь работает !
Написание программы klonkide для моего последнего проекта года.
Но теперь произошла ошибка, которая ошеломила меня.
Это черновик моей программы клондайк;
// ConsoleApplication18.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;
// Removed part
class card {
char *rank[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
char *suit[] = {"S", "D", "H", "C"};
char *show[] = { "Up", "Down" };
};
Однако на «* rank []» была ошибка, которая гласит: «Неполный тип недопустим». Также я получаю ошибку C2011 при запуске. Кроме того, когда я попытался написать класс, вышеприведенные символы начнут получать ошибку типа Incomplete. Помогите?
Теперь я удалил «struct», но ошибка неполного типа все еще существует, и теперь она показывает:
Ошибка C2229 класса «карта» имеет недопустимый массив нулевого размера
Ошибка C2997 ‘card :: show’: невозможно определить границы массива из инициализатора класса
На самом деле структура была только там из-за этой ошибки.
РЕДАКТИРОВАТЬ: хорошо. Теперь я решил эту проблему, диктуя массивы таким образом, как один из ответов ниже. Я также нашел другую проблему, которая скоро заслужит другой вопрос.
-2
Решение
Вы не можете иметь struct card
а также class card
в то же время.
0
Другие решения
Вы объявили два типа с одним и тем же именем, нарушая одно правило определения.
Учтите, что в C ++ строковые литералы имеют типы постоянных символьных массивов. Таким образом, например, второй класс должен быть определен как
class card {
const char *rank[13] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
const char *suit[4] = {"S", "D", "H", "C"};
const char *show[2] = { "Up", "Down" };
};
Что касается сообщения об ошибке, размеры массивов в определении класса должны быть указаны явно.
0
Visual Studio 2013 не полностью совместим с C ++ 11, посмотрите на этот ответ
Ошибка: невозможно указать явный инициализатор для массива
Вы можете инициализировать вектор в ctor.
class card_class { std::vector<std::string> rank; std::vector<std::string> suit; std::vector<std::string> show; public: card_class() { rank = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; suit = { "S", "D", "H", "C" }; show = { "Up", "Down" }; } };
-1
Вопрос:
Кто-нибудь знает, что означает эта ошибка и почему она возникает, когда я пытаюсь определить массив внутри структуры?
struct test{ int idk[] = { 1,2,3 }; };
Почему массив idk неполный тип или что-то еще?
Заранее спасибо.
Ps. Мне нужно это, поэтому я могу получить доступ к этим массивам из тестовой структуры.
Лучший ответ:
При объявлении переменной в локальной области (например, в теле функции, например) вы можете сделать это, и компилятор не будет жаловаться, он выведет, что вы имеете в виду массив из 3 элементов.
void someFunc()
{
int idk[] = { 1,2,3 }; // Ok, so idk is in fact a int[3];
// Do whatever work...
}
Когда вы делаете то же самое в объявлении класса или структуры, компилятор не хочет выводить это для вас, поэтому в основном вам нужно быть более строгим.
Для полной причины, почему вы можете видеть здесь (в чем причина невозможности вывода размера массива из строки инициализации в переменной-члене?) Среди других мест.
Поэтому, чтобы заставить его работать, вам нужно:
struct test
{
int idk[3] = { 1,2,3 };
};
Что касается того, почему люди могут не любить этот вопрос, ну, это своего рода мирский вопрос, и действительно любой поиск в google даст ответ. Сам компилятор отменит ошибку, и просто поиск этого будет в большинстве случаев найти ответ для вас.
В принципе, такой вопрос говорит сообществу, что вы не проводили никаких исследований до того, как задали свой вопрос.
С помощью Visual Studio компилятор создает эту ошибку: Ошибка C2997 ‘test :: idk’: привязка массива не может быть выведена из инициализатора в классе
Это довольно ясно.
Мик
Ответ №1
array bound cannot be deduced from an in-class initializer
Поэтому изменение фрагмента на
struct test{ int idk[3] = { 1,2,3 };
приводит к успешной компиляции.
Неполный тип
- Ограничения при использовании неполных типов
- Примеры неполных типов и способы их полного определения
Неполный тип – это элемент, который сообщает компилятору, что существует тип с таким именем, но ничего не говорит ему о том, как он реализован: какие есть функции, переменные и т. д. Обычно эти типы полностью определяются позже, поэтому такое объявление часто называют опережающим (forward declaration).
К неполным типам относятся:
- тип void;
- структуры, классы, объединения, для которых ещё не определена реализация;
- массивы неопределённого размера;
- массивы элементов неполного типа.
Чтобы тип стал полным (полностью определенным) необходимо указать недостающую информацию. Отдельно стоит отметить тип void, который не может быть полным в принципе.
Ограничения при использовании неполных типов
Так как неполный тип ничего не говорит компилятору о своём внутреннем устройстве, то не получится скомпилировать код, который пытается получить доступ к его содержимому. Также невозможно будет выполнить операции, требующие знания точного размера типа. Для этого необходимо знать размер типов, которые содержатся в требуемом классе.
Примеры неполных типов и способы их полного определения
Неполный тип можно получить при использовании следующих конструкций языка:
Опережающая декларация (forward-declaration):
class MyType;
Указатель на неизвестный тип:
struct MyType *myPtr;
Массив, содержащий элементы неопределённого типа (даже если количество элементов известно):
MyType b[10];
Во всех этих случаях, для полного определения типа, мы обязаны предоставить где-нибудь реализацию типа ‘MyType’. Например, такую:
class MyType {
int someNumber;
}
В таком случае все ограничения, накладываемые на неполные типы, будут сняты.
Отдельного разъяснения заслуживает ситуация с массивами неопределённого размера, т. к. при их использовании есть несколько нюансов. Например:
extern int a[]; // Неполный тип (массив неизвестного
// размера с элементами типа 'int')
int b[] = { 1, 2, 3 }; // Полный тип (массив из трёх значений типа 'int')
int c[10]; // Полный тип
Также на массивы неизвестного размера могут быть созданы ссылки и указатели, но в языке С++ они не могут быть инициализированы (или присвоены) указателями на массивы с известным размером. Данное ограничение отсутствует в языке С, т. к. там указатели на обычные массивы и на массивы неизвестного размера совместимы, а поэтому могут свободно конвертироваться и присваиваться в обоих направлениях.
extern int a[];
int (&a1)[] = a; // ОК
int (*a2)[] = &a; // ОК
int (*a3)[2] = &a; // Ошибка в С++, но корректно в С
int b[] = {1, 2, 3};
int (&b1)[] = b; // Ошибка
int (*b2)[] = &b; // Ошибка в С++, но корректно в С
Присылаем лучшие статьи раз в месяц
- [x ] I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
- [x ] I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
- [x ] I have searched the issue tracker for a similar issue and not found a similar issue.
Environment
- Development Kit: ESP32-Wrover-Kit
- Kit version (for WroverKit): [v1|v2|v3|v4]
- Module or chip used: [ESP32-WROOM-32]
- IDF version (run
git describe --tags
to find it):
// v3.2-dev-1148-g96cd3b75c - Build System: [Make|CMake]
- Compiler version (run
xtensa-esp32-elf-gcc --version
to find it):
// 1.22.0-80-g6c4433a - Operating System: [Windows]
- Power Supply: [USB]
Problem Description
I am using Visual Studio 2017 to build projects for ESP32, anyway it keeps me warning me about the following possible error :
STRUCT_AFIELD_A(char,1,XCHAL_CP1_SA_ALIGN,CS_SA_,cp1,XCHAL_CP1_SA_SIZE)
Error (active) E0070 incomplete type is not allowed Sketch2 c:UsersYordanAppDataLocalarduino15packagesesp32hardwareesp321.0.0toolssdkincludeesp32xtensaxtruntime-core-state.h 166
and this reapeats for all of the follows :
STRUCT_AFIELD_A(char,1,XCHAL_CP0_SA_ALIGN,CS_SA_,cp0,XCHAL_CP0_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP1_SA_ALIGN,CS_SA_,cp1,XCHAL_CP1_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP2_SA_ALIGN,CS_SA_,cp2,XCHAL_CP2_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP3_SA_ALIGN,CS_SA_,cp3,XCHAL_CP3_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP4_SA_ALIGN,CS_SA_,cp4,XCHAL_CP4_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP5_SA_ALIGN,CS_SA_,cp5,XCHAL_CP5_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP6_SA_ALIGN,CS_SA_,cp6,XCHAL_CP6_SA_SIZE)
STRUCT_AFIELD_A(char,1,XCHAL_CP7_SA_ALIGN,CS_SA_,cp7,XCHAL_CP7_SA_SIZE)
The projects compile without problem, but this is sitting there all the time.
I am just posting it in just-in-case scenario.
Expected Behavior
unknown
Actual Behavior
unknown
Steps to repropduce
- Install Arduino Studio.
- Install Visual Studio 2017.
- install «VisualMicro» plugin.
- Try to build any project and check the Error list.
Сообщение от PeterVl
Просто я думал, что разница во времени компиляции не настолько ощутима.
когда ты пишешь в своём хедере:
этот заголовок в свою очередь подтягивает другие заголовки.
а те — ещё какие то.
в результате, там сверху прицепляются тонны библиотечного и не очень кода.
и все эти тонны компилятору приходится парсить каждый раз заново для каждой очередной cpp
если проект маленький, всего из нескольких файликов,
то на скорость компиляции действительно можно забить.
однако, на практике, проекты имеют свойство разрастаться.
и по мере их роста, скорость компиляции все ощутимее и ощутимее даёт о себе знать.
просто представь себе, сколько всякого хлама тянет за собой
единственное включение: #include <conditional_variable>
распечатка заголовков
Код
1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecondition_variable 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xthread 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xthrcommon.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeyvals.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexkeycheck.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecrtdefs.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludesal.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeConcurrencySal.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevadefs.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeuse_ansi.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xtime 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xtimec.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrttime.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wtime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethr/xthreads.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludelimits.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludetuple 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludenew 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeexception 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludetype_traits 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexstddef 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstddef 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtstddef.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstdlib 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtstdlib.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_search.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wstdlib.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeinitializer_list 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludextr1common 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtmalloc.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_exception.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeeh.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_terminate.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_new.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexutility 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeclimits 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeutility 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeiosfwd 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstdio 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtstdio.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wstdio.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_stdio_config.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstring 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtstring.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_memory.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_memcpy_s.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrterrno.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_string.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wstring.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecwchar 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtwchar.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wconio.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wctype.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wdirect.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wio.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_share.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_wprocess.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtsys/stat.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtsys/types.h 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcrtdbg.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_new_debug.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludemutex 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludechrono 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludelimits 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeymath.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecfloat 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtfloat.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecmath 1> Note: including file: C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtmath.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludextgmath.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincluderatio 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludestdint.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludefunctional 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexfunctional 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexstring 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexmemory0 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstdint 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexatomic0.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludesetjmp.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeimmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludewmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludenmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludesmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludetmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludepmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeemmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexmmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludemmintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludeammintrin.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludetypeinfo 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime_typeinfo.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludevcruntime.h 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludesystem_error 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecerrno 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludestdexcept 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludethread 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludememory 1> Note: including file: C:Program Files (x86)Microsoft Visual Studio 14.0VCincludexmemory
отступы показывают вложенность.
кто кого дополнительно прицепил.
если у тебя там парочка файлов — пофигу.
но если их уже сотни — как то не круто получается в 100й раз парсить весь этот хлам.
есть два решение проблемы компиляции:
1. профилактический
в хедерах изначально только и только самый необходимый минимум.
по возможности везде стараемся обойтись forward declaration,
избегая до последнего включения других хедеров.
в спп подтягиваем только необходимый минимум хедеров.
2. предварительно скомпилированный заголовок.
pch — вундервафля компиляторов ц++.
кардинальным образом решает проблему избыточного включения заголовков,
и как следствия — медленной компиляции.
оба способа друг другу не мешают.
использовать оба варианта в работе — признак годного профессионализма.
Добавлено через 9 минут
Сообщение от neit95
Там схема не сложная: ищем все включения
вы там полноценный сишный препроцессор что ли запилили?
или как именно вы умыдряетесь найти все включения?
простой пример:
C++ | ||
|
учитывая «препроцессорную сложность»,
возникли закономерные вопросы:
как именно вы ищете все включения?
что конкретно ты подразумевал под словами: «схема не сложная» ?
Сообщение от neit95
коментим первое, компилим. Если скомпилировалось — значит лишнее. И так со всеми.
сколько часов по времени занимает проверка проекта среднего размера, по такой схеме?
допустим, среднее время сборки небольшой библиотеки — 1.20 минут.
допустим, в ней используется порядка 100 разных заголовков,
львиная часть которых описана в pch.h,
изменение которого, как известно,
приводит к полному ребилду всего проекта.
итого: 2 часа на сверку 100 заголовков.
как то не очень круто, да?
Всем привет! Занялся тут UE5 и при компиляции проекта в Visual Studio 2019 возникает ошибка:
Unable to build while Live Coding is active. Exit the editor and game, or press Ctrl+Alt+F11 if iterating on code in the editor or game
И еще связанные с этим проблема компиляции при запущенном редакторе UE5
Error (active) E0070: incomplete typeError (active) E0070 invalid incomplete typeОшибка (активно)E0070 недопустимый неполный типD:Program FilesEpic GamesUE_5.0EngineSourceRuntimeSlateCorePublicLayoutBasicLayoutWidgetSlot.h
Первое решение это закрывать редактор UE5, удалить папку Binaries из вашего проекта UnrealEngine, и при запуске проекта заново разрешить UE5 пересобрать вашу сборку, там выскочит соответствующее окно.
А вот само собственно второе решение проблемы:
В моем коде Main.cpp
у меня есть следующее, что показано ниже. Проблема, с которой я столкнулся с tuple<int, int, int>
Я продолжаю получать эти три ошибки
function "sPA" returns incomplete type "trie"
, incomplete type is not allowed
и cannot convert to incomplete class "trie"
Что я здесь делаю не так, чтобы допустить эту ошибку?
// Main.cpp
#include <iostream>
#include <string>
using namespace std;
typedef pair<int, int> int_pair;
typedef tuple<int, int, int> trie;
int_pair sum_and_product(int a, int b) {
return int_pair(a + b, a * b);
}
trie sPA(int a, int b, int c) {
trie t{ a + b + c,a * b * c,((a + b + c) / 3) };
return t;
}
void consuming_templates() {
int a = 2, b = 3, c = 4;
auto results = sum_and_product(a,b);
cout << "sum = " << results.first << "|product = " << results.second << endl;
auto r2 = sPA(a, b, c);
}
int main(int argc, char* argv[]) {
consuming_templates();
return 0;
}
1 ответ
Лучший ответ
Idclev 463035818 и M.M опубликовали комментарий, чтобы ответить на мой вопрос
Вам нужно сделать #include <tuple>
и #include <utility>
2
Glenville Pecor
20 Фев 2020 в 01:54