Navigation

    cpp-logo

    C++ Community

    • Registrieren
    • Anmelden
    • Suche
    • Kategorien
    • Aktuell
    • Tags
    • Beliebt
    • Gruppen
    1. Übersicht
    2. Beliebt
    Melde dich an, um einen Beitrag zu erstellen
    • Alle Kategorien
    • Ankündigungen
    •      Die Artikel
    • C++ (alle ISO-Standards)
    •      MFC
    •      VCL (C++ Builder)
    •      C++/CLI mit .NET
    •      Andere GUIs - Qt, GTK+, wxWidgets
    • Sonstige Programmiersprachen
    •      C (alle ISO-Standards)
    •      C# und .NET
    •      Java
    •      Assembler
    •      Webzeugs
    • Betriebssysteme
    •      WinAPI
    •      Linux/Unix
    •      Projekt: OS-Development
    •      DOS und Win32-Konsole (nur Lesen)
    • Weitere Fachbereiche
    •      Mathematik und Physik
    •      Spiele-/Grafikprogrammierung
    •      Datenbanken
    •      Compiler- und IDE-Forum
    •      Projekte
    • Jenseits der Programmierung
    •      Beruf und Ausbildung
    •      Stellenangebote
    •      Themen rund um die IT
    •      Gaming-Corner
    • Forentechnik
    • Archiv
    •      Das C++ Magazin
    •          Die Redaktion
    •          Die Autoren
    •          Allgemeines zum Magazin
    •          Archiv
    •      Organisation des Forumtreffens
    •      FAQs - Frequently Asked Questions
    •          FAQ - C (C89, C99 und C11)
    •          FAQ - Assembler
    •          FAQ - C++ (auch C++0x, C++11)
    •          FAQ - C++/CLI
    •          FAQ - C++ Builder (VCL/CLX)
    •          FAQ - C# und .NET
    •          FAQ - Compiler & IDEs
    •          FAQ - Datenbanken
    •          FAQ - DOS und Win32-Konsole
    •          FAQ - Grafik-/Spieleprogrammierung
    •          FAQ - GUIs
    •          FAQ - Java
    •          FAQ - Linux/Unix
    •          FAQ - Mathematik und Physik
    •          FAQ - MFC
    •          FAQ - Rund um die Programmierung
    •          FAQ - Sonstiges
    •          FAQ - Webzeugs
    •          FAQ - WinAPI
    •          FAQ - Forentechnik
    • Alle Themen
    • Neue Themen
    • Beobachtete Themen
    • Unbeantwortete Themen
    • Gesamter Zeitraum
    • Tag
    • Woche
    • Monat

    • *

      GCC 16.1.0 und Modules
      C++ (alle ISO-Standards) • • *john 0  

      9
      0
      Stimmen
      9
      Beiträge
      1198
      Aufrufe

      *

      @Finnegan sagte in GCC 16.1.0 und Modules: @john-0 Interessanterweise hatte ich gerade beim Bauen von GCC 16.1.0 exakt dasselbe Problem (Konflikt mit __mbstate_t). Die Ursache bei mir war allerdings, dass ich noch ein #include <meta> in einer meiner Quellcode-Dateien hatte aus einer Zeit, wo std::meta noch nicht in das std-Modul integriert war. Dabei war es übrigens egal, dass es vor dem import std; stand. in der alten Entwicklungsversion hat das noch so funktioniert, mit GCC 16.1.0 allerdings nicht mehr. Wie ich bereits schrieb, ich inkludiere nur C Header, da ich Dinge mit ncurses bzw. der Wide Version davon mache, und ohne C Header geht da nichts. Sicherlich wird die C++ Standard Bibliothek einiges davon auch inkludieren, aber diese Header hatten schon immer Include Guards. Dazu empfinde ich es als besonders verwirrend, wenn man das std Module importiert, und es zu Kollisionen kommt. Im Vergleich zu den klassischen C++ Headern wird nun im Modul std alles in ::std definiert. Eigentlich sollte es daher gerade nicht mehr zu Problemen kommen. Erst seit GCC 16 gibt es nun das Module std.compat. Stell auf jeden Fall sicher, dass du keine Header der Standardbibliothek mit #include einbindest, wenn du import std; verwendest. Ich habe auch in irgendwelchen Bug-Reports gelesen, dass das zu kombinieren nicht funktioniert. Da gibt's auf jeden Fall noch einiges, das im argen liegt beim std-Modul. Ich hab grad auch noch einen Bug gemeldet, der allerdings nicht direkt mit diesem Problem zu tun hat. Seit GCC 14 hatte ich keine Probleme mit dem GCC Modul Support, aber es gab bisher auch kein Support für Reflection. Sobald ich Reflection aktiviere fliegt mir der Code um die Ohren. Fazit, ich lasse bis auf weiteres die Finger von Reflection.
    • B

      Forum weiterhin ?
      Forentechnik • • biter  

      8
      0
      Stimmen
      8
      Beiträge
      1122
      Aufrufe

      F

      @Dravere Auch ein interessanter Nebeneffekt: Habe schon mehr als einmal, als ich der KI erklärt habe, warum der als fehlerhaft angekreidete Code dennoch korrekt ist, selbst nochmal richtig darüber nachgedacht und ein ganz anderes Problem entdeckt, das wir beide nicht gesehen haben. Auch wenn das etwas ist, das auch ein Kollege liefern kann: der hat halt auch nicht immer Zeit für die Probleme anderer. Und es zeigt aber auch, wie nützlich ein Review selbst dann ist, wenn der Reviewer nicht den besten Durchblick hat.
    • S

      Re: [IntelliJ: externes Tool oder Skript direkt vor einem Build ausführen?
      Java • • SiegfriedFeuer  

      2
      0
      Stimmen
      2
      Beiträge
      572
      Aufrufe

      I

      Was ist das denn für ein komischer Fred, der mit einer Antwort anfängt?
    • E

      Buchempfehlung "Expedition Chaos: Vom Fixpunkt zur Feigenbaum-Konstante - Experimente mit dem Chaos Labor in C#"
      Mathematik und Physik • • Erhard Henkes  

      2
      0
      Stimmen
      2
      Beiträge
      435
      Aufrufe

      Cool! Ein Buch zur Chaostheorie im Bücherschrank meiner Eltern hat mich mit zu einem meiner ersten ernsthaften, guten Computerprogramme inspiriert, als ich eben genau das Bifurkationsdiagramm von deinem Titelbild nachprogrammiert habe. Hat mir sicher nicht geschadet Leider hat die Mandelbrotmenge im Anschluss nicht funktioniert, weil ich als 13-jähriger nicht so recht wusste, wie man mit komplexen Zahlen rechnet (QBasic hatte auch keinen eingebauten Typ dafür), und meine Versuche das anhand von Lexikonartikeln zu lernen (Damals gab es noch nicht wirklich Internet für Normalleute zuhause) waren nicht so erfolgreich.
    • T

      Zähler Auslesen
      Projekte • • Tuxist1  

      1
      0
      Stimmen
      1
      Beiträge
      366
      Aufrufe

      T

      Moin, wir haben einen Zähler mit RJ45 bekommen, habe jetzt eine kleine Software geschrieben um die Daten auszulesen und nach MQTT zu exportieren. Wer Interesse hat hier der Quellcode und MSI Installer: https://tuxist.de/git/tuxist/zaehler2mqtt http://files.tuxist.de/files/zaehler2mqtt-1.0.0.msi Einfach im Browser aufrufen: http://127.0.0.1:8080 Zählerurl ist bei zum Beispiel: https://192.168.33.2/json/metering/origin/<zählernummer>/extended
    • SDL2 Input Handling
      C++ (alle ISO-Standards) • • zeropage  

      1
      0
      Stimmen
      1
      Beiträge
      283
      Aufrufe

      Hallo, Sorry, das ich so lange weg war, aber ich hatte Schwierigkeiten mich anzumelden, bis ich mitbekommen hatte, das ich hier ne andere Mail Adresse hatte.Aber nun gut. Ich beschäftige micht gerade mit SDL2 und fand das Input Handling etwas irritierend. Einerseits scheint es nach meinen rudimentären Recherchen unterschiedliche Vorgehensweisen für gedrückte und gehaltene Tasten zu geben, andererseits will ich keine EventLoop für Tastendrücke haben. So kam ich zu einer für mich zufriedenstellenden Lösung, die ich hier gerne vorstellen möchte. Diese ist natürlich nur in meinem Horizont, es mag bestimmt besserere Lösungen geben, die ich nur noch nicht gesehen habe. Ich finde meine Lösung aber recht intuitiv, weil es nur zwei Bedingungen gibt. Man muss eine 'Mouse Update' Methode vor einem Frame setzen und eine "Key Update" nach jedem Frame. Außerdem werden drei Tastenzustände registriert; Pressed, Held, Released. Das Ganze sieht dann so aus: #pragma once #include <zp/Core/Common.h> namespace zp { struct KeyState { bool Pressed = false; bool Released = false; bool Held = false; }; } namespace zp { class SDLInput { public: SDLInput(); void updateKeyInput(); void updateMouseInput(); private: const Uint8* m_CurrentKeyStates; Uint8 m_PreviousKeyStates[SDL_NUM_SCANCODES]; KeyState m_KeyState; static constexpr Uint32 MOUSE_KEY_BUFFER = 5; Uint32 m_CurrentMouseStates[MOUSE_KEY_BUFFER]; Uint32 m_PreviousMouseStates[MOUSE_KEY_BUFFER]; KeyState m_MouseState[MOUSE_KEY_BUFFER]; ivec2 m_MousePos; public: const KeyState& getKey(const SDL_Scancode key); const KeyState& getKey(const KeyCode key); const KeyState& getMouse(const MouseButton button) const; const ivec2& getMousePos() const; private: void updateKeyState(const SDL_Scancode key); void updateMouseState(); }; } Hier die cpp: #include <zp/Input/SDLInput.h> zp::SDLInput::SDLInput() : m_CurrentKeyStates(SDL_GetKeyboardState(nullptr)) { updateKeyInput(); } void zp::SDLInput::updateKeyInput() // set after frame { // Update previous states memcpy(m_PreviousKeyStates, m_CurrentKeyStates, SDL_NUM_SCANCODES); } void zp::SDLInput::updateMouseInput() // set before frame { updateMouseState(); } const zp::KeyState& zp::SDLInput::getKey(const SDL_Scancode key) { updateKeyState(key); return m_KeyState; } const zp::KeyState& zp::SDLInput::getKey(const KeyCode key) { updateKeyState(static_cast<SDL_Scancode>(key)); return m_KeyState; } const zp::KeyState& zp::SDLInput::getMouse(const MouseButton button) const { return m_MouseState[static_cast<Uint32>(button)]; } const zp::ivec2& zp::SDLInput::getMousePos() const { return m_MousePos; } /* private */ void zp::SDLInput::updateKeyState(const SDL_Scancode key) { if (m_CurrentKeyStates[key]) { if (!m_PreviousKeyStates[key]) { m_KeyState.Pressed = true; m_KeyState.Held = true; m_KeyState.Released = false; } else { m_KeyState.Pressed = false; m_KeyState.Held = true; m_KeyState.Released = false; } } else { if (m_PreviousKeyStates[key]) { m_KeyState.Pressed = false; m_KeyState.Held = false; m_KeyState.Released = true; } else { m_KeyState.Pressed = false; m_KeyState.Held = false; m_KeyState.Released = false; } } } void zp::SDLInput::updateMouseState() { int x, y; auto mouseState = SDL_GetMouseState(&x, &y); m_MousePos = ivec2(x, y); for (auto i = 0; i < MOUSE_KEY_BUFFER; ++i) { m_CurrentMouseStates[i] = mouseState & SDL_BUTTON(i); m_MouseState[i].Pressed = false; m_MouseState[i].Released = false; if (m_CurrentMouseStates[i] != m_PreviousMouseStates[i]) { if (m_CurrentMouseStates[i]) { m_MouseState[i].Pressed = true; m_MouseState[i].Held = true; } else { m_MouseState[i].Released = true; m_MouseState[i].Held = false; } } m_PreviousMouseStates[i] = m_CurrentMouseStates[i]; } } Ich habe dann auch eigene enums, die ich auch intuitiver finde. Die KeysCodes habe ich einfach von der sdl2 wiki kopiert. enum class MouseButton : Uint32 { LEFT = SDL_BUTTON_LEFT, MIDDLE = SDL_BUTTON_MIDDLE, RIGHT = SDL_BUTTON_RIGHT, X1 = SDL_BUTTON_X1, X2 = SDL_BUTTON_X2 }; enum class KeyCode : Uint32 { A = 4, B = 5, C = 6, D = 7, E = 8, F = 9, G = 10, H = 11, I = 12, J = 13, K = 14, L = 15, M = 16, N = 17, O = 18, P = 19, Q = 20, R = 21, S = 22, T = 23, U = 24, V = 25, W = 26, X = 27, Y = 28, Z = 29, D1 = 30, D2 = 31, D3 = 32, D4 = 33, D5 = 34, D6 = 35, D7 = 36, D8 = 37, D9 = 38, D0 = 39, RETURN = 40, ESCAPE = 41, BACKSPACE = 42, TAB = 43, SPACE = 44, F1 = 58, F2 = 59, F3 = 60, F4 = 61, F5 = 62, F6 = 63, F7 = 64, F8 = 65, F9 = 66, F10 = 67, F11 = 68, F12 = 69, HOME = 74, PAGEUP = 75, DELETE = 76, END = 77, PAGEDOWN = 78, RIGHT = 79, LEFT = 80, DOWN = 81, UP = 82 }; Sorry, das ich wieder kaum kommentiert habe, aber da habe ich echt noch Schwierigkeiten. Zwar bin ich nicht besonders kritikreselient aber wer mag, kann gerne seine Gedanken dazu schreiben. LG