Работают ли пользовательские исключения C++ из модуля в GCC (14.2.0)?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Работают ли пользовательские исключения C++ из модуля в GCC (14.2.0)?

Сообщение Anonymous »

Реализованы ли в GCC модули C++, позволяющие создать в модуле собственное исключение для использования в другом файле? Я получаю следующую ошибку с GCC 14.2.0 через MinGW/MSYS:

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

 x86_64-w64-mingw32-gcc -std=c++23 -fmodules-ts -x c++-system-header -c cstdint variant exception
x86_64-w64-mingw32-gcc -std=c++23 -fmodules-ts -lstdc++ -x c++ -c error.cppm -o error.o
x86_64-w64-mingw32-gcc -std=c++23 -fmodules-ts error.o main.cpp -lstdc++ -static-libstdc++ -o test.exe
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\msys64\tmp\ccztFNJq.o:main.cpp:(.text+0x0): multiple definition of `Crash@Error::~Crash()'; error.o:error.cppm:(.text$_ZNW5Error5CrashD1Ev[_ZNW5Error5CrashD1Ev]+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\msys64\tmp\ccztFNJq.o:main.cpp:(.text+0x2e): multiple definition of `Crash@Error::~Crash()'; error.o:error.cppm:(.text$_ZNW5Error5CrashD0Ev[_ZNW5Error5CrashD0Ev]+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Если я явно создаю деструктор по умолчанию или пустой деструктор для Crash, ошибка не изменится.
Исключение было создано согласно этот файл:
error.cppm

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

export module Error;

import ;
import ;

export enum class ErrorCode: uint8_t {
INVALID,
PROBLEM1,
PROBLEM2,
};

export class Crash: public std::exception {
public:
Crash(ErrorCode crashCode) noexcept: code(crashCode) { }

private:
ErrorCode code;
};
Основной файл, который я использовал для тестирования, просто выдает исключение.
main.cpp

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

import Error;

int main() {
throw Crash(ErrorCode::PROBLEM1);
}
Я просто пока не могу этого сделать или я допустил фундаментальную ошибку в своем коде? Может ли это быть потому, что я не поместил код модуля в пространство имен?

Подробнее здесь: https://stackoverflow.com/questions/792 ... gcc-14-2-0
Ответить

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

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

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

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

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