Ошибка недопустимый неполный тип c

В такой ситуации вам надо принять волевое решение о том, какой тип (и, соответственно, заголовок) считать более низкоуровневым, а какой — более высокоуровневым. При включении заголовочных файлов, разрешается включать только более низкоуровневые заголовки в более высокоуровневые заголовки, но не наоборот. При необходимости упомянуть в низкоуровневом заголовке тип из более высокоуровневого заголовка просто делается предварительное объявление типа.

Например, в вашем случае естественно было бы считать тип 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 функции. Но при необходимости и это достижимо заведением дополнительного включаемого файла.

As @Mgetz says, you probably forgot to #include <fstream>.

The reason you didn’t get a not declared error and instead this incomplete type not allowed error has to do with what happens when there is a type that has been «forward declared», but not yet fully defined.

Look at this example:

#include <iostream>

struct Foo; // "forward declaration" for a struct type

void OutputFoo(Foo & foo); // another "forward declaration", for a function

void OutputFooPointer(Foo * fooPointer) {
    // fooPointer->bar is unknown at this point...
    // we can still pass it by reference (not by value)
    OutputFoo(*fooPointer);
}

struct Foo { // actual definition of Foo
    int bar;
    Foo () : bar (10) {} 
};

void OutputFoo(Foo & foo) {
    // we can mention foo.bar here because it's after the actual definition
    std::cout << foo.bar;
}

int main() {
    Foo foo; // we can also instantiate after the definition (of course)
    OutputFooPointer(&foo);
}

Notice we could not actually instantiate a Foo object or refer its contents until after the real definition. When we only have the forward declaration available, we may only talk about it by pointer or reference.

What is likely happening is you included some iostream header that had forward-declared std::ofstream in a similar way. But the actual definition of std::ofstream is in the <fstream> header.


(Note: In the future be sure to provide a Minimal, Complete, Verifiable Example instead of just one function out of your code. You should supply a complete program that demonstrates the problem. This would have been better, for instance:

#include <iostream>

int main() {
    std::ofstream outFile("Log.txt");
}

…also, «Output» is generally seen as one complete word, not two as «OutPut»)

Цитата
Сообщение от PeterVl
Посмотреть сообщение

Просто я думал, что разница во времени компиляции не настолько ощутима.

когда ты пишешь в своём хедере:

этот заголовок в свою очередь подтягивает другие заголовки.
а те — ещё какие то.

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

если проект маленький, всего из нескольких файликов,
то на скорость компиляции действительно можно забить.

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

просто представь себе, сколько всякого хлама тянет за собой
единственное включение: #include <conditional_variable>

распечатка заголовков

Код

1>  Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\condition_variable
1>  Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\thr/xthread
1>  Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\thr/xthrcommon.h
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\yvals.h
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xkeycheck.h
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\crtdefs.h
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\sal.h
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ConcurrencySal.h
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vadefs.h
1>  Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt.h
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\use_ansi.h
1>  Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\thr/xtime
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\thr/xtimec.h
1>  Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\time.h
1>  Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wtime.h
1>  Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\thr/xthreads.h
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\limits.h
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\tuple
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\new
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\exception
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstddef
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstddef
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stddef.h
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstdlib
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdlib.h
1>  Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h
1>  Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_search.h
1>  Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wstdlib.h
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\initializer_list
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtr1common
1>  Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\malloc.h
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime_exception.h
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\eh.h
1>  Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_terminate.h
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime_new.h
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xutility
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\climits
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iosfwd
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstdio
1>  Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wstdio.h
1>  Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_stdio_config.h
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstring
1>  Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\string.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_memory.h
1>  Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_memcpy_s.h
1>  Note: including file:            C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\errno.h
1>  Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime_string.h
1>  Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wstring.h
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cwchar
1>  Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\wchar.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wconio.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wctype.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wdirect.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wio.h
1>  Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_share.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_wprocess.h
1>  Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\sys/stat.h
1>  Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\sys/types.h
1>  Note: including file:        C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\crtdbg.h
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime_new_debug.h
1>  Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\mutex
1>  Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\chrono
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\limits
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ymath.h
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cfloat
1>  Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\float.h
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cmath
1>  Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\math.h
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtgmath.h
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ratio
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\stdint.h
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\functional
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstring
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xmemory0
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstdint
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xatomic0.h
1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\intrin.h
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\setjmp.h
1>  Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\immintrin.h
1>  Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\wmmintrin.h
1>  Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\nmmintrin.h
1>  Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\smmintrin.h
1>  Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\tmmintrin.h
1>  Note: including file:              C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\pmmintrin.h
1>  Note: including file:               C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\emmintrin.h
1>  Note: including file:                C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xmmintrin.h
1>  Note: including file:                 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\mmintrin.h
1>  Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ammintrin.h
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\typeinfo
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime_typeinfo.h
1>  Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1>  Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cerrno
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\stdexcept
1>  Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\thread
1>  Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\memory
1>  Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xmemory

отступы показывают вложенность.
кто кого дополнительно прицепил.

если у тебя там парочка файлов — пофигу.
но если их уже сотни — как то не круто получается в 100й раз парсить весь этот хлам.

есть два решение проблемы компиляции:

1. профилактический
в хедерах изначально только и только самый необходимый минимум.
по возможности везде стараемся обойтись forward declaration,
избегая до последнего включения других хедеров.

в спп подтягиваем только необходимый минимум хедеров.

2. предварительно скомпилированный заголовок.
pch — вундервафля компиляторов ц++.
кардинальным образом решает проблему избыточного включения заголовков,
и как следствия — медленной компиляции.

оба способа друг другу не мешают.
использовать оба варианта в работе — признак годного профессионализма.

Добавлено через 9 минут

Цитата
Сообщение от neit95
Посмотреть сообщение

Там схема не сложная: ищем все включения

вы там полноценный сишный препроцессор что ли запилили?
или как именно вы умыдряетесь найти все включения?

простой пример:

C++
1
2
3
4
5
6
7
8
9
10
#ifdef dOS_WINDOWS
    #include <windows_spec.hpp>
#else
    #include <posix_spec.hpp>
#endif
 
// путь к файлу так же может быть взят из значения макроса
// который может быть передан например, из командной строки
// #define dADDITIONAL_SPEC <additional_spec.hpp>
#include dADDITIONAL_SPEC

учитывая «препроцессорную сложность»,
возникли закономерные вопросы:

как именно вы ищете все включения?
что конкретно ты подразумевал под словами: «схема не сложная» ?

Цитата
Сообщение от neit95
Посмотреть сообщение

коментим первое, компилим. Если скомпилировалось — значит лишнее. И так со всеми.

сколько часов по времени занимает проверка проекта среднего размера, по такой схеме?

допустим, среднее время сборки небольшой библиотеки — 1.20 минут.
допустим, в ней используется порядка 100 разных заголовков,
львиная часть которых описана в pch.h,
изменение которого, как известно,
приводит к полному ребилду всего проекта.

итого: 2 часа на сверку 100 заголовков.

как то не очень круто, да?

Когда вы разрабатываете программу на C++, вы можете столкнуться с ошибкой, которая называется «Недопустимый неполный тип». Эта ошибка связана с тем, что вы используете переменную или тип данных, который еще не определен. В этой статье мы рассмотрим причины возникновения этой ошибки и методы ее устранения.

Причины возникновения ошибки «C++ Недопустимый неполный тип»

Ошибки «Недопустимый неполный тип» могут возникнуть по нескольким причинам:

  1. Вы пытаетесь использовать переменную или тип данных, который еще не был определен. Это может произойти, например, если вы попытаетесь использовать указатель на тип данных, который еще не был определен.

  2. Вы пытаетесь использовать переменную или тип данных, который был определен, но не в том месте вашего кода, где вы пытаетесь его использовать.

  3. Вы пытаетесь использовать переменную или тип данных, который был объявлен как private или protected, и вы пытаетесь получить доступ к нему откуда-то за пределами класса.

Методы устранения ошибки «C++ Недопустимый неполный тип»

Есть несколько методов, которые вы можете использовать, чтобы устранить ошибку «Недопустимый неполный тип» в вашей программе на C++:

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

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

  3. Если вы пытаетесь получить доступ к переменной или типу данных за пределами класса, проверьте модификаторы доступа (private, protected, public) в вашем классе и убедитесь, что переменная или тип данных доступен там, где вы пытаетесь его использовать.

  4. Некоторые IDE могут подсказать вам, где именно возникает ошибка. Таким образом, вы можете легко найти и устранить ошибку.

  5. Вы можете использовать дебаггер, чтобы найти место, где возникает ошибка, и попытаться исправить ее.

Заключение

Ошибка «Недопустимый неполный тип» может возникнуть в вашей программе на C++ по нескольким причинам. Если вы столкнулись с этой ошибкой, вы можете использовать несколько методов, чтобы устранить ее. Основные методы заключаются в том, чтобы проверить, что вы правильно объявили переменную или тип данных и что они были определены до того, как вы попытались использовать их в вашей программе. Несмотря на то, что это может занять некоторое время, устранение ошибки может помочь избежать более серьезных проблем в вашей программе в будущем.

Вопрос:

Кто-нибудь знает, что означает эта ошибка и почему она возникает, когда я пытаюсь определить массив внутри структуры?

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 };

приводит к успешной компиляции.

Понравилась статья? Поделить с друзьями:
  • Ошибка недействительная сессия майнкрафт hamachi
  • Ошибка невозможно подключиться к серверу майнкрафт
  • Ошибка невозможно установить windows на этот диск
  • Ошибка невозможно подключиться к серверу rdp
  • Ошибка недействительные параметры инстаграм