Schlagwort-Archive: C++

MSYS2 make: command not found

Ich habe MSYS2 installiert und dann die MinGW-Toolchain komplett installiert, mit folgendem Befehl:

$ pacman -S mingw-w64-x86_64-toolchain

Es sind praktisch die gesamten GNU-Entwickler-Tools dabei, einfach super. Trotzdem bekomme ich bei dem Aufruf von Make einen Fehler:

$ make
bash: make: command not found

Komisch ist, das gcc aber gefunden wird:

$ gcc
gcc.exe: fatal error: no input files
compilation terminated.

Die Ursache ist hier, dass die Tools alle wie erwartet heißen, mit der Ausnahme von Make. Dieses heißt im Bin-Ordner so:

msys64\mingw64\bin\mingw32-make.exe

Die Lösung ist hier einfach: man kopiert sich mingw32-make.exe in das selbe Verzeichnis und benennt die Kopie make.exe. So das beide Namensvarianten gefunden werden können. Fertig. Danach funktioniert es:

$ make
make: *** No targets specified and no makefile found. Stop.

Dieses Problem ist seit Jahren bekannt. Es wird aber leider vom MinGW-Team nicht korrigiert. Sehr schade.

C++17 ist komplett

Laut Herbe Sutter (dem Vorsitzenden des ISO-C++-Komitees) ist C++ 17 technisch komplett. Es wurde noch in letzter Minute der Typ std::byte aufgenommen, der das Arbeiten mit 8-Bit-Daten erleichtert. Denn unsigned char ist nicht so einfach zu schreiben und zu lesen.

Jetzt muss noch C++17 für die ISO fertig formuliert werden. Wie der Name sagt, soll die neue C++-Norm noch dieses Jahr offiziell werden.

Quelle: Trip report: Winter ISO C++ standards meeting (Kona), C++17 is complete | Sutter’s Mill

Virtuelle Konstruktoren in C++

Wir kennen das Konzept der Polymorphie, die die dynamische Bindung (Dynamic Binding) auf Klassen-Funktionen ermöglicht. Der Vorteil der dynamischen Bindung ist die schwächere Kopplung zu Objekttypen. Wir müssen keine Typunterscheidung vornehmen, wenn wir eine Objektfunktion aufrufen, und dadurch ist unser Programm wartungsfreundlicher und erweiterbar.

In C++ erreichen wir das durch virtuelle Funktionen. Aber können wir dieses Konzept auch auf die Erstellung von Objekt-Typen anwenden? Also das unser Programm nicht schon beim Kompilieren wissen muss, welcher Typ zu erzeugen ist?

// konkreter Typ nicht bekannt, 
// wir kennen nur den Basis-Typ:
Base *obj = new Unbekannt();

Weiterlesen