C2028 beim Umstieg von #include<array> zu import std;
-
Ich möchte die std library als modul einbinden, scheitere aber an dieser cryptischen fehlermeldung:
1>------ Build started: Project: libClientOutput, Configuration: Debug x64 ------ 1>Scanning sources for module dependencies... 1>changemessagepages.cpp 1>C:\ecworks_mep\libClientOutput\src\dragbitmap.h(5,5): fatal error C1907: unable to recover from previous error(s); stopping compilation 1>INTERNAL COMPILER ERROR in 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\CL.exe' 1> Please choose the Technical Support command on the Visual C++ 1> Help menu, or open the Technical Support help file for more information 1>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\random(5007,32): error C2028: struct/union member must be inside a struct/union 1>(compiling source file '../src/changemessagepages.cpp') 1>Done building project "libClientOutput.vcxproj" -- FAILED.
nach ich folgendes geändert hatte:
//#include <array> import std;
Wenn ich es wieder rückgängig mache kompiliert es wieder ohne fehler.
Auch die Datei changemessages.cpp enthält nichts Auffälliges:
#include "changemessagepages.h" bool DECLDIR_CLI_OUT libClientOutput::isDefManualChange(TWhatChangedPage whatChanged) { return whatChanged == TWhatChangedPage::DEF_AMPLITUDE_CHANGED || whatChanged == TWhatChangedPage::DEF_DEPTH_CHANGED || whatChanged == TWhatChangedPage::DEF_POS_CHANGED || whatChanged == TWhatChangedPage::DEF_CODE_CHANGED; }
Was könnte das Problem sein?
-
@mael15 Ich bin da nicht ganz auf dem neuesten Stand, aber als ich sowas das letzte mal getestet habe, unterstützte MSVC nur
import std.core;
.import std;
ist soweit ich informiert bin ein C++23-Feature, das m.W. noch von keinem Compiler unterstützt wird. Zumindest GCC 14.2 kann es auch noch nicht.Und ja, ich bin bei meinen Module-Experimenten auch auf viele ICEs gelaufen. Nicht nur bei MSVC, die anderen verschlucken sich da auch schonmal gerne.
Edit: Laut dieser Übersicht scheint MSVC mittlerweile doch C++23 " Standard Library Modules" zu unterstützen. Als Kommentar steht da allerdings "Modules work but you need to manually add them to your Visual Studio project." ... vielleicht hilft das ja weiter, das Problem einzugrenzen. Der ICE ist jedenfalls sehr verdächtig und lässt mich das Feature noch als sehr experimentell einordnen. Da sollte es mindestens eine Fehlermeldung geben, dass das Modul nicht gefunden wurde.
-
"INTERNAL COMPILER ERROR" bedeutet, daß der Compiler selbst einen Fehler beim Kompilieren hat, d.h. selber kann man da nichts tun.
Hast du denn die neueste VS-Version, also das aktuellste Update 17.13 installiert?
Bei der Suche nach dem Fehler (+ "error C2028") bin ich auf error C2028: struct/union member must be inside a struct/union sowie boost::basic_string_view generates compilation error with Header units gestoßen und dies scheint schon seit VS-Version 17.8, d.h. Okt. 2023, gelöst zu sein.
Solltest du diesen auch bei der neuesten VS-Version erhalten, dann wende dich ebenfalls an die Visual Studio Developer Community.
-
@Th69 ja, hab die aktuelle 17.13.6 installiert. danke!
-
@mael15 Hast du den verwendeten c++ Standard auf
latest
stehen?
-
@Schlangenmensch sagte in C2028 beim Umstieg von #include<array> zu import std;:
@mael15 Hast du den verwendeten c++ Standard auf
latest
stehen?ja, und auch /experimental:module aktiviert.
das alles klappt auch in einem test projekt für module, aber nicht in diesem hier gezeigten.
-
Was ich gerade zufällig sehe, du inkludierst
random
irgendwo. Es gab mal Probleme bei VC++, wenn manimport std;
und alte includes von Standard Headern verwendet.Ich hab das jetzt länger nicht mehr probiert, aber du könntest versuchen, alle Ahängigkeiten von der Standard Lib mit
import std;
zu ersetzen, oder in deinem kleinen Testprojekt mal den Include vonrandom
auch irgendwo dazu packen und gucken ob das funktioniert.Die Fehlermeldung die ich, bei dem Versuch Modules und normale Includes zu kombinieren, bekommen hatte war aber ein anderer: https://www.c-plusplus.net/forum/topic/354629/c-modules-und-star-ship-operator/2