Пропавшие инициализаторы.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Пропавшие инициализаторы.

Сообщение Anonymous »

Я получаю предупреждение (превращено в ошибку с -Werror ) о пропущенном поле инициализаторах при использовании назначенных инициализаторов для полей в моей структуре, потому что я не инициализации полей в 3-й базовом классе, Boost :: Introdered_set_base_hook

Код: Выделить всё

error: missing initializer for member ‘foo::boost::intrusive::unordered_set_base_hook’
[-Werror=missing-field-initializers]

10 |     foo f { .bar = 1 };
|                      ^
< /code>
Вот минимальный воспроизводимый пример: < /p>
#include 

struct foo : boost::intrusive::unordered_set_base_hook
{
int bar;
};

int main()
{
foo f { .bar = 1 };
return 0;
}
Вот мой файл cmakelists.txt . Я указываю, что BOOST включает DIR-это каталог системы , чтобы подавить предупреждения от заголовков Boost.

Код: Выделить всё

cmake_minimum_required(VERSION 3.18)
project(scratch_test)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Boost)

add_executable(scratch
main.cpp
)

target_compile_options(scratch
PRIVATE
-Wmissing-field-initializers
-Werror
)

target_include_directories(scratch
SYSTEM PRIVATE
${Boost_INCLUDE_DIRS}
)
Посмотреть на исходный код для Boost :: Introbline , фактически код фактически выглядит так:

Код: Выделить всё

struct generic_hook
{
void* next_;
};

struct unordered_set_base_hook : generic_hook
{
};
Так что, действительно, следующее _ не инициализируется.
Я даже пытался изменить свой код, чтобы использовать свой собственный базовый класс, который I в классе инициализации в Nullptr :

struct generic_hook
{
void* next_ {nullptr};
};

struct unordered_set_base_hook : generic_hook
{
};

struct foo : unordered_set_base_hook
{
int bar;
};

int main()
{
foo f { .bar = 1 };
return 0;
}
< /code>
Я все еще получаю ошибку: < /p>

Код: Выделить всё

error: missing initializer for member ‘foo::unordered_set_base_hook’
[-Werror=missing-field-initializers]

17 |     foo f { .bar = 1 };
|                      ^
Это законное предупреждение/ошибка? Какой правильный курс действий здесь?


Подробнее здесь: https://stackoverflow.com/questions/797 ... base-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»