Du bist nicht angemeldet.

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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

11

01.12.2016, 13:50


@BlueCobold
Soll ich deiner Meinung also lieber getter funktionen verwenden?

Weiss noch niemand, was der Fehler sein könnte?

Wie schon gesagt, der Operator ist unverständlich und bei mehreren Werten kann es zu Problemen führen. Lösungen sind selten global für alle Probleme zu gebrauchen aber in diesem Fall ist es sinnvoll eine vernünftige Methode anstatt eines Operators anzubieten.

edit: Beim eigentlichen Problem kann ich dir leider grad nicht helfen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

01.12.2016, 14:02

Ich würde viel eher mal die Frage in den Raum stellen, inwiefern es Sinn macht, dass die WindowClass dein Window besitzt... ;)

13

01.12.2016, 17:28

@dot
Ich würde dich mal fragen, warum du so eine Frage stellst obwohl alles prächtig funktioniert und ich eine
ganz andere Frage hatte... ;)

14

01.12.2016, 18:57

@Koschi
Könnte ich auch die Init Methode im Konstruktor aufrufen und dann so weitergeben oder wie
würdest du es mir empfehlen?
Und das window[0] ist ein operator, damit ich keine getter funktion verwenden muss


Ja kannst du machen, die Init-Methode dann aber private halten.

Wie Blue schon sagt sehr unintuitiv mit dem Operator[].

Hast du schon mal mit dem Debuger geschaut?
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

15

02.12.2016, 15:24

@Koschi

Habe jetzt einige Änderungen gemacht.
1. Ich gebe die Init Funktion jetzt über den Konstruktor weiter
2. Verwende keinen operator mehr sondern eine getter Funktion

Ja ich habe den Debugger schon benutzt, konnte aber nichts falsches feststellen oder
ich bin zu doof und überseh was ^^

16

02.12.2016, 18:41

Habe mir mal das Bsp. der MSDN angeschaut.

Du hast nahezu das Bsp. 1 zu 1 Kopiert. Daher könnten die Änderungen vielleicht das Problem sein.

z.B.

Zitat

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TCHAR Planets[9][10] =  
{
    TEXT("Mercury"), TEXT("Venus"), TEXT("Terra"), TEXT("Mars"), 
    TEXT("Jupiter"), TEXT("Saturn"), TEXT("Uranus"), TEXT("Neptune"), 
    TEXT("Pluto??") 
};
       
TCHAR A[16]; 
int  k = 0; 

memset(&A,0,sizeof(A));       
for (k = 0; k <= 8; k += 1)
{
    wcscpy_s(A, sizeof(A)/sizeof(TCHAR),  (TCHAR*)Planets[k]);

    // Add string to combobox.
    SendMessage(hWndComboBox,(UINT) CB_ADDSTRING,(WPARAM) 0,(LPARAM) A); 
}
aus der MSDN.

dein entsprechender Part:

Zitat


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
TCHAR Combobox_File[9][16] =
{
    TEXT("New"), TEXT("Open"), TEXT("Add"), TEXT("Save      Ctrl+S"),
    TEXT("Save As..."), TEXT("Save All"), TEXT("Exit        Alt+F4")
};
...
for (k = 0; k <= 8; k += 1)
{
    // Copies a string
    wcscpy_s(A, sizeof(A) / sizeof(TCHAR), (TCHAR*)Combobox_File[k]);

    // Add string to combobox
    SendMessage(hWndComboBox_File, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)A);
}


Also ich muss voraus schicken das ich nicht weiß ob folgendes dein Fehler behebt! Auf jeden werden ein paar Fehler behoben.

Da ich nicht gern Vorsage, sondern lieber Fragen stelle, so dass du drauf kommen was falsch läuft:

Weißt du was diese Zeile genau macht?

C-/C++-Quelltext

1
2
3
4
5
TCHAR Combobox_File[9][16] =
{
    TEXT("New"), TEXT("Open"), TEXT("Add"), TEXT("Save      Ctrl+S"),
    TEXT("Save As..."), TEXT("Save All"), TEXT("Exit        Alt+F4")
};

Weißt du in welchem zusammenhange dieser Code mit dem oberen Code steht?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
for (k = 0; k <= 8; k += 1) /* Besonders diese Zeile muß dir klar sein/werden */
{
    // Copies a string
    wcscpy_s(A, sizeof(A) / sizeof(TCHAR), (TCHAR*)Combobox_File[k]);

    // Add string to combobox
    SendMessage(hWndComboBox_File, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)A);
}


Versuch einfach mal die Fragen zu Beantworten.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

17

02.12.2016, 19:52

@Koschi

Ja ich habe mir diese Seite als Beispiel genommen aber ich habe nichts kopiert sondern alles selber
geschrieben und mir auch immer überlegt, was dieser Code machen könnte, damit ich es kapiere.

Zu deinen Fragen:
1)Ich erstelle ein mehrdimensionales Array und darin speichere ich die Werte, die die Combo Box haben soll.
2)Diese Schleife durchläuft jedes Mal den TCHAR und kopiert diesen TEXT und speichert den in "A".
Danach sendet er A zum Fenster und dort wird es bearbeitet.

EDIT: Zu deinem Kommentar, K zählt jedes mal eins hoch, wenn die Schleife einmal durchgelaufen ist und zählt bis 8 und danach
springt sie raus. Die 8 ist dazu da, weil ich 7 Texte habe und er nach dem siebten Mal nochmals hochgeht um die Bedingung zu prüfen und zählt
dann nochmals eins dazu (Wurde mir so im Compiler angezeigt)

18

02.12.2016, 20:31

So ich würde sagen verstanden hast du es, was der Code macht, nur nicht bis zum Ende gedacht :D

1)Ich erstelle ein mehrdimensionales Array und darin speichere ich die Werte, die die Combo Box haben soll.
Erste Dimension sagt wieviel Texte du das Array haben soll, Zweite Dimension sagt wie lang die texte sein dürfen. Stimmen diese Zahlen mit der Initialisierung des Array wirklich überein?
2)Diese Schleife durchläuft jedes Mal den TCHAR und kopiert diesen TEXT und speichert den in "A".
Danach sendet er A zum Fenster und dort wird es bearbeitet.
Ja, stimmt.

EDIT: Zu deinem Kommentar, K zählt jedes mal eins hoch, wenn die Schleife einmal durchgelaufen ist und zählt bis 8 und danach
springt sie raus. Die 8 ist dazu da, weil ich 7 Texte habe und er nach dem siebten Mal nochmals hochgeht um die Bedingung zu prüfen und zählt
dann nochmals eins dazu (Wurde mir so im Compiler angezeigt)
Falsch, diese Schleife wird nicht 7 mal durchlaufen. Wie oft wird sie denn durchlaufen?
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

19

02.12.2016, 20:54

Erste Dimension sagt wieviel Texte du das Array haben soll, Zweite Dimension sagt wie lang die texte sein dürfen. Stimmen diese Zahlen mit der Initialisierung des Array wirklich überein?

Hab die Länge des Textes ausgebessert, der längste String ist 13 bits gross(13 Zeichen).
Aber gehen müsste es ja trotzdem wenn man 16 Zeichen, statt 13 Zeichen benutzt?

Falsch, diese Schleife wird nicht 7 mal durchlaufen. Wie oft wird sie denn durchlaufen?

Hmmm das ist komisch, mir wurde im Debugger angezeigt, das K insgesamt 7 mal durchläuft.
Sie läuft so oft durch, bis die Bedingung nicht mehr erfüllt ist, dass heisst wenn sie grösser als 6 oder gleich gross wie 6 ist.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

02.12.2016, 22:11

Zählen wir doch mal die gültigen Werte für k durch:
1) k = 0
2) k = 1
3) k = 2
4) k = 3
5) k = 4
6) k = 5
7) k = 6
8) k = 7
9) k = 8
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige