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

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Перезапись видимости включенных типов данных для подавления «предупреждения: объявлено с большей видимостью, чем тип его

Сообщение Anonymous »


При компиляции программы на C++ я получаю сообщение об ошибке:

В файле, включенном в pybind11_error.cpp:33: pybind11_error.h:38:7: предупреждение: «MyClass» объявлен с большей видимостью, чем тип его поля «MyClass::py_mod» [-Wattributes] 38 | класс МойКласс { Мой pybind_error.h выглядит так:

#include класс МойКласс { публика: недействительный инициализации (); частный: интервал ан_int; pybind11::module_ py_mod; }; И pybind_error.cpp выглядит так:

#include "pybind11_error.h" недействительный MyClass::init() { py_mod = pybind11::module_::import("numpy"); } интервал основной() { pybind11::initialize_interpreter(); МойКласс мой_класс; мой_класс.инит(); pybind11::finalize_interpreter(); вернуть 0; } Я делаю два замечания:
[*]Мне кажется, что это предупреждение очевидно верно и также отражает мои намерения. Я намерен, чтобы py_mod был закрытым членом и, следовательно, был недоступен за пределами класса. Публичные функции должны быть доступны вне класса. Если только мое понимание того, что означает «публичный» и «частный», не совсем неверно, код должен быть написан именно так, чтобы достичь того, чего я хочу, и поэтому это не должно вызывать предупреждения. [*]Поскольку предупреждение не инициируется an_int, мне кажется, что это связано с использованием библиотеки pybind11.
Следуя мысли, изложенной в пункте (2), я просмотрел документацию по pybind11::module_, которую можно найти на веб-сайте pybind11. Это заставляет меня подозревать, что виновником является ключевое слово public в объявлении:

class Module_: общедоступный объект Итак, мой вопрос, если я правильно понял проблему, могу ли я каким-то образом изменить видимость pybind11::module_, чтобы устранить предупреждение? (разумеется, без изменения исходного кода библиотеки Pybind11)

Я это уже пробовал:

pybind11::module_ __attribute__((visibility ("скрытый"))) py_mod; что создает предупреждение: атрибут «видимость» игнорируется. Для меня это интуитивно понятно, поскольку мне не нужно указывать, что частный член должен быть скрыт.

РЕДАКТИРОВАТЬ: Как обсуждалось в комментариях, добавление опции компиляции:

-fvisibility=скрытый Решает проблему. Однако это относится ко всем проектам, что может быть не идеально. Обратите внимание, что первая строка pybind_error.h изменена на:

#pragma GCC push видимости (скрыто) #include #pragma Всплывающее окно видимости GCC создает другую ошибку.
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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