Не удается по умолчанию построить объект класса, полученный из базы со сцеплением модуляC++

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

Сообщение Anonymous »

Рассмотрим следующий модуль, состоящий из трех единиц: < /p>
  • Раздел реализации модуля: < /p>

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

    module my_module:base;
    
    class Base {
    public:
    Base() = default;
    };
    < /code>
    < /li>
      Разделение блока интерфейса модуля: < /p>
    export module my_module:derived;
    
    import :base;
    
    export class Derived final : public Base {
    public:
    Derived() = default;
    };
    < /code>
    < /li>
      Блок интерфейса первичного модуля: < /p>
    export module my_module;
    export import :derived;
    
Проблема заключается в том, что я не могу создать создание извне модуля, когда я получаю следующую ошибку:

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

error: definition of 'Base' must be imported from module 'my_module' before it is required
7 |     Derived() = default;
|     ^
note: in defaulted default constructor for 'Derived' first required here
118 |     Derived d_1;
Однако, как только я определяю конструктор по умолчанию для полученного явно, например:
export class Derived final : public Base {
public:
Derived() : Base {} {}
};
< /code>
Проблема исчезла. Я использую Clang 19, и для меня это выглядит как ошибка, не так ли?

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

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

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

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

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

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