Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Alter Hase
C-/C++-Quelltext |
|
1 2 |
Window window("Hello, bla bla", 600, 400); Context context(window, parameter....); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
Context::Context(const char* titel, int,...){ // Erstelle Fenster pContext = new Context(*this); // Error ensteht hier. // ENDE des Konstruktors } Window window(...); |
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Julién« (12.05.2016, 20:27) aus folgendem Grund: Vergewaltigung der deutschen Sprache
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Ich vermute, dass du zweimal das selbe Fenster mit dem Befehl RegisterClassEx registrierst. Um das zu überprüfen müsstest du mal die Konstruktoren der beiden Klassen posten.
Darfst du im Konstruktor überhaupt *this benutzen? Das Objekt ist ja noch nicht vollständig erzeugt und du würdest damit eine Kopie anlegen.
Btw: *this allein legt keine Kopie an, erst wenn du das daraus erhaltene lvalue kopierst, legst du eine Kopie an. Das *this könnte in dem Fall hier aber beispielsweise auch einfach an eine Referenz gebunden werden...
*wiouwiouwiou*
Mein new-Detektor schlägt aus.
Auf jeden Fall Warum kein Smartpointer?
Alter Hase
Alter Hase
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
Window::Window(const char* pTitle, uint32_t nWidth, uint32_t nHeight, bool bFullscreen, bool bVisible){ WNDCLASSEX wc = {}; wc.cbSize = sizeof(WNDCLASSEX); wc.hInstance = GetModuleHandle(nullptr); wc.lpfnWndProc = internal::WndProc; wc.lpszClassName = pTitle; wc.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC; if(0 == RegisterClassEx(&wc)){ // // The exception class will contain the error code and // a error description. // std::error_code err_code(GetLastError(), std::system_category()); throw std::system_error(err_code); } if(true == bFullscreen){ DEVMODE dmScreen = {}; dmScreen.dmSize = sizeof(DEVMODE); for(int i = 0; EnumDisplaySettings(nullptr, i, &dmScreen); i++){ if((dmScreen.dmPelsWidth == nWidth) && (dmScreen.dmPelsHeight == nHeight) && (dmScreen.dmBitsPerPel == 32)){ break; } } ChangeDisplaySettings(&dmScreen, CDS_FULLSCREEN); } pHandle = new internal::WindowHandle(nWidth, nHeight); RECT clientArea = { 0, 0, (long) nWidth, (long) nHeight}; AdjustWindowRect(&clientArea, bFullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW, false); pHandle->handle = CreateWindowEx( bFullscreen ? WS_EX_APPWINDOW : NULL, pTitle, pTitle, bFullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW, // NOTE: Perhaps I'll create a window config struct? GetSystemMetrics(SM_CXSCREEN) / 2, GetSystemMetrics(SM_CYSCREEN) / 2, clientArea.right - clientArea.left, clientArea.bottom - clientArea.top, nullptr, // We're not having a parent window nullptr, // nor a win32 menu. GetModuleHandle(nullptr), pHandle // Is needed for the router 'WndProc'. ); if(nullptr == pHandle->handle){ delete pHandle; // We don't want a memory leak, do we? std::error_code err_code(GetLastError(), std::system_category()); throw std::system_error(err_code); } if(true == bVisible) ShowWindow(pHandle->handle, SW_SHOWDEFAULT); |
Werbeanzeige