Сообщение от 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; // Ошибка в С++, но корректно в С
Присылаем лучшие статьи раз в месяц
In my code Main.cpp
I have the following shown below. The issue I am running into us with tuple<int, int, int>
I keep getting these three errors
function "sPA" returns incomplete type "trie"
, incomplete type is not allowed
, and
cannot convert to incomplete class "trie"
What am I doing wrong here to make this error?
// 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;
}
Модератор: vetal
tchupa » Пн ноя 28, 2016 1:20 pm
-
tchupa
- Добрался до абсорбера
-
-
-
Canon G1010 series, G2010 series, G3010 series, G4010 series
Verter в форуме Файлообменник
- 0
- 3574
Verter
Ср авг 19, 2020 12:00 pm
-
Canon G1010 series, G2010 series, G3010 series, G4010 series
-
-
Canon IR 2018 выдает ошибку «out of toner change toner»
Sveterkom в форуме Принтеры, МФУ, копиры формата A3
- 11
- 10008
Goldwater
Чт окт 08, 2020 11:29 pm
-
Canon IR 2018 выдает ошибку «out of toner change toner»
-
-
Canon G1000 series, G2000 series, G3000 series Service Manua
Verter в форуме Файлообменник
- 10
- 5874
Azelus
Пт июн 12, 2020 4:46 am
-
Canon G1000 series, G2000 series, G3000 series Service Manua
-
-
Canon IR 3225 «засыпает»
johnnybravo в форуме Принтеры, МФУ, копиры формата A3
- 4
- 7159
johnnybravo
Пн июл 23, 2012 1:32 pm
-
Canon IR 3225 «засыпает»
-
-
Canon IR 1018 «Download Standby»
goldsmith в форуме Принтеры, МФУ, копиры формата A3
- 13
- 16983
Hammerzem
Пт дек 30, 2016 1:25 pm
-
Canon IR 1018 «Download Standby»
Вернуться в Принтеры, МФУ, факсы, копиры формата A4
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 105
- [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.
Вход Регистрация
Главная » Список форумов » РЕМОНТ И СЕРВИС » Ремонт офисной техники » Canon
Правила форума
Внимание!
- При создании новой темы в заголовке обязательно укажите тип аппарата, модель, проблему. Пример: МФУ Samsung SCX-4200 — ошибка LSU.
- Дополнительные правила пользования ресурсом читаем тут:Правила
Страница 1 из 1 | [ Сообщений: 6 ] |
Для печати |
Предыдущая тема | Первое новое сообщение | Следующая тема |
Автор | Сообщение |
---|---|
Заголовок сообщения: Canon LBP 7010C цветной ошибка Е 070 0001 Добавлено: 13 апр 2014, 23:02 |
|
|
После замены черного тонер-картриджа 729 выходит: ошибка техобслуживания, код ошибки E 070 0001,не удалось задать сведения для принтера. При этом картридж в расходниках видит полным и доступным. В режим замены не входит ни в ручном через кнопку «бумага», ни программно, только через снятие стопора в выключенном состоянии и прокруткой в ручную до позиции замены. В тех поддержке сказали, что системная ошибка, привози на тестирование в сервис. Прошу помощи скинуть ошибку и если есть сервис мануал к нему. |
|
|
Реклама | |
|
|
Lesovick |
Заголовок сообщения: Canon LBP 7010C цветной ошибка Е 070 0001 Добавлено: 14 апр 2014, 08:37 |
||||||||||||
|
сейчас посмотрю что в загашнике есть … Добавлено спустя 3 минуты 3 секунды: Цитата: TOP detection mechanismon the ITB dose not function normally. • Check the connector of the ITB Unit and the Engine Controller PCB.(J130,J611) мануал куда скинуть? _________________ |
||||||||||||
|
|||||||||||||
Алекс647 |
Заголовок сообщения: Canon LBP 7010C цветной ошибка Е 070 0001 Добавлено: 14 апр 2014, 21:48 |
|
Спасибо за помощь огромное, правда, я не силен в техническом английском, но посижу, разберусь. Мануал скиньте на *@yandex.ru если не затруднит. Еще раз большой респект Лисовик за оперативность и внимание. |
|
|
Lesovick |
Заголовок сообщения: Canon LBP 7010C цветной ошибка Е 070 0001 Добавлено: 15 апр 2014, 08:01 |
||||||||||||
|
мануал скинул… 1. проверьте контакты разьема (передернуть мануал советует, но может быть где и обрыв в цепи): J130,J611 Но как показывает практика, дело было в соединении( разьемы J130,J611), «электроника — наука о контактах» _________________ |
||||||||||||
|
|||||||||||||
Lesovick |
Заголовок сообщения: Canon LBP 7010C цветной ошибка Е 070 0001 Добавлено: 05 май 2014, 16:30 |
||||||||||||
|
Цитата: Здравствуйте, наконец-то пишу отчёт о проделанной «работе». Сначала долго искал родной картридж, их нет в продаже, только совместимые, но в Электронном рае на Пражской ребята нашли за 2,5 тыс. , короче подсунул ему уже родное, он долго как-то гонял и гремел необычно, потом выдал ошибку Е021 0000. Тут я вообще встал в тупик. Хотя все картриджи видит полными и доступными. Дальше решил разбирать, проверил все разъёмы, всё сидит плотно, перевёл ошибку Е021 0000- оказывается, движок, что крутит барабан с картриджами, работает ненормально, не набирает обороты. И тут осенило, что-то клинит его, снял верхнюю крышку для открытого доступа к барабану и увидел,что жёлтый картридж почему-то вышел из своего гнезда и цепляет за окружающее при вращении. А вот как он выскочил, не понимаю, или такая конструкция гнезда, что нет надёжной фиксации или при ручной установке нельзя до конца вставить, не понятно. Короче, поправил его, не собирая до конца корпус, только верхнюю крышку поставил, чтобы не блокировался, ещё обратил внимание на датчик исходного положения барабана SR7, справа вверху на шестерне с вырезами стоит оптопара, внимательно выставил барабан вращением так, чтобы прорезь совпала с оптопарой ( не загораживала свет ). Включил и обрадовался, всё пошло как и должно. Затем проверил положение барабана ещё раз после выключения, чёрный картридж стоит в позиции замены и свободно вынимается, датчик положения стоит уже в другом месте и шторка закрывает оптопару, овальное отверстие в корпусе для шестерни совпадает с отверстием в самой шестерне, там есть ещё рычажок на шарнире со шторкой, который также перекрывает свет и он заходит в барабан. Что он контролирует, не понял, может наличие картриджей . Похоже, это истинное исходное положение барабана, а положение шторок особого влияния не имеет. Вот такое решение проблемы, ставить назад совместимый не пробовал, может теперь и он пошёл бы, а может и нет и снова выскочет Е070 0001 и снова всё поновой, не хочется рисковать и тратить время. Еще раз большое спасибо за мануал, если б не было, вряд ли догадался бы сам правильно всё выставить. Думаю, пригодится кому-нибудь моя писанина и поможет решить подобные проблемы. С уважением и взаимовыручкой, Александр _________________ |
||||||||||||
|
|||||||||||||
Реклама | |
|
|
sergyk_1 |
Заголовок сообщения: Re: Canon LBP 7010C цветной ошибка Е 070 0001 Добавлено: 31 май 2017, 16:34 |
|
Добрый день. sergyk_1@mail.ru |
|
|
Страница 1 из 1 | [ Сообщений: 6 ] |
Похожие темы | Автор | Ответов | Просмотров | Последнее сообщение | ||
---|---|---|---|---|---|---|
Kyocera FS-1128 MFP ошибка » замените PU »
в форуме Kyocera Mita |
Юра |
2 |
23980 |
26 июн 2012, 10:08 Юра |
||
Ошибка принтера HP 1018/1020…»В принтере открыта передняя крышка или отсутствует картридж»
в форуме Hewlett-Packard |
BatterFly |
1 |
31287 |
17 апр 2012, 14:25 Felix |
||
Re: Ошибка принтера HP 1018/1020…»В принтере открыта передняя крышка или отсутствует картридж»
[ На страницу: 1, 2 ] в форуме Hewlett-Packard |
ignorov |
10 |
28636 |
23 ноя 2012, 13:22 BatterFly |
||
Brother 7057R — ошибка «Печать невозм EC»
в форуме Прочие бренды |
Felix |
3 |
14627 |
16 янв 2014, 11:59 Lesovick |
||
HP P2055, ошибка «Зажевана бумага под картриджем»
в форуме Hewlett-Packard |
Felix |
3 |
14771 |
27 июн 2013, 14:00 Lesovick |
Главная » Список форумов » РЕМОНТ И СЕРВИС » Ремонт офисной техники » Canon
Кто сейчас на форуме |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
Найти: |
© 2011-2019 Смоленский форум • Smolshopmarket.ru • Пользовательское соглашение, © 2000, 2002, 2003, 2007 phpbb
Копирование материалов разрешено с активной ссылкой на http://forum.smolshopmarket.ru/