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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

11

21.03.2015, 16:28

Was mich auch interessieren würde: Warum dieses Kuddelmuddel mit dem Umwandeln von chars in strings über sonstwas, welchen Grund hat das?

In C gibt es keinen Datentyp für Strings, dort benutzt man char-Zeiger. In C++ gibt es für sowas die Klasse std::string. Die ist viel mehr als nur ein Zeiger. Wenn du ausschließlich C++ benutzt und nicht C/C++ vermischst (sprintf und Konsorten sind C, nicht C++), dann musst du auch nichts umwandeln. Viele APIs, wie auch die WinAPI, sind aber leider klassische C-APIs, so dass du doch wieder gezwungen bist, die beiden zu vermischen ...

Und ja, bitte poste lieber erst einmal deine eigenen Versuche. Wenn wir dir fertige Lösungen vorsetzen, lernst du nicht so viel daraus wie wenn du es selbst hinkriegst.

Korowai

unregistriert

12

22.03.2015, 09:20

O.K.,

also hier die relevanten Ausschnitte:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#define STRICT
#define _CRT_SECURE_NO_WARNINGS
#include <tchar.h>
#include <Windows.h>
#include <iostream>
#include <strsafe.h>
#include <tchar.h>
#include <string>
#define _tWinMain wWinMain
using namespace std;


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
struct restona_guldon
    {
        string staatsform = "Demokratie";
        int ressfaktor = 55;
        int artefakt = 0;
        int techlevel = 6;
        int feindseligkeit = 0;
        bool netzwerk1 = false;
        bool netzwerk2 = false;
        bool kartographie1 = false;
        bool piraterie1 = false;
        int schuerfersteuer = 75;
        };
char zeichen[30] = { "=" };
    char temp[20] = { ' ' };
    int length;
    int length1;
    int length2;
    int length3;
    char temp1[20] = { ' ' };
    char temp2[20] = { ' ' };
    char temp3[20] = { ' ' };


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
switch (message)
    {
        
    case WM_PAINT:
    {
                     zyklus = zyklus + 1;
                     const char szText[] = "Runde ";
                     const char auswahltext1[] = "1 - Flotte \r\n 2 - Mobilisierung \r\n 3 - Basisausbau \r\n 4 - Fördern \r\n 5 - Produktion \r\n 6 - Markt \r\n 7 - Kriegszug \r\n 8 - Applikation \r\n 9 - Basis wechseln \r\n 0 - nächste Runde";
                     const char auswahltext2[] = "PleCs = ";
                     const char auswahltext3[] = "momentane Basis = ";
                     const char auswahltext4[] = "EP = ";

                     hDC = BeginPaint(hWnd, &ps);
                     {
                         SetTextColor(hDC, RGB(255, 0, 0));
                         SetBkColor(hDC, RGB(0, 0, 0));
                         TextOut(hDC, 50, 0, szText, sizeof(szText)-1);
                         TextOut(hDC, 50, 50, auswahltext1, sizeof(auswahltext1)-1);
                         TextOut(hDC, 50, 75, auswahltext2, sizeof(auswahltext2)-1);
                         TextOut(hDC, 50, 100, auswahltext3, sizeof(auswahltext3)-1);
                         TextOut(hDC, 50, 125, auswahltext4, sizeof(auswahltext4)-1);
                         length = sprintf(temp, " = %d", zyklus);
                         GetClientRect(hWnd, &rect);
                         TextOut(hDC, 100, 0, temp, length);

                         length1 = sprintf(temp1, " = %d", plecs[1]);
                         GetClientRect(hWnd, &rect);
                         TextOut(hDC, 100, 75, temp1, length1);

                         length2 = sprintf(temp2, "= %d", EP[1]);
                         GetClientRect(hWnd, &rect);
                         TextOut(hDC, 100, 125, temp2, length2);

                         length3 = sprintf(temp3,"= %s", restona_guldon.staatsform;
                         TextOut(hDC, 100, 100, temp3, length3);
                         
                                             
                         EndPaint(hWnd, &ps);





                     }


Ist mit SIcherheit einiges noch ziemlich verknorzt, aber bitte konzentriert Euch auf bestehende Frage. Wobei ich natürlich auch für gewisse Weichenstellungen hinsichtlich Programmverbesserung offen bin.
Die Fenstererstellung habe ich mal weg gelassen.

Schönen Sonntag,

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

22.03.2015, 09:23

Mir scheint, du hättest die Antworten nicht richtig gelesen ... :(

Die schließende Klammer fehlt immer noch, und du hast immer noch keine Instanz deiner struct erstellt. Ich würde dir raten, zu deinem Tutorial/Buch zurückzukehren und nochmal zu lesen, wie das mit den Klassen und Strukturen funktioniert. Hier liegt nämlich ein grundsätzliches Missverständnis deinerseits vor.

Natürlich könnten wir dir sagen, wie es richtig geht, aber dann stolperst du nur von Problem zu Problem und brauchst jedes Mal Hilfe.

Korowai

unregistriert

14

22.03.2015, 10:03

HI Daniel,

ne ich hatte leider noch keine Zeit, mich mit Euren Anmerkungen zu befassen. Werde das ich den nächsten Tagen machen. Und das Ergebnis dann posten.

Danke,
Ciao

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

22.03.2015, 10:12

Wozu stellt man Fragen in einem Forum, wenn die Antworten nicht gelesen werden? Zumindest die ersten zwei on-Topic-Antworten hätte man ja lesen können...
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]

Korowai

unregistriert

17

28.03.2015, 23:19

Hi,

hatte einfach keine Zeit. Jetzt habe ich diese, bin mir aber nicht im Klaren, wo ich die ERweiterung .c_str() setzen soll.
Der Compiler erwartet in der Ausgabe von:

C-/C++-Quelltext

1
length3 = sprintf(temp3,"= %d", restona_guldon.staatsform;


eine Klammer.

Habe auch eine Instanz erstellt. Problem bleibt das gleiche.

Ciao

Korowai

unregistriert

18

28.03.2015, 23:23

Ich glaube, mein grundsätzliches Problem ist die Konvertierung des Strings in einen Wert, den winapi erkennt und ausgibt.

Bin echt ratlos.

Psyco001

Frischling

Beiträge: 54

Wohnort: Berlin

  • Private Nachricht senden

19

29.03.2015, 01:51

Wie David bereits angemerkt hat fehlt auch jetzt immer noch die schließende Klammer auf welche dich die Fehlermeldung genauestens hinweist.
Was die Ausgabe des Strings angeht hat er es auch ziemlich genau auf den punkt gebracht.

sprintf ist eine Funktion von C und erwartet also auch Datentypen aus C, in diesem Fall halt char*.
dein string jedoch ist eine Klasse aus C++ und kann dir dafür aber den nötigen Datentypen liefern.
Diesen Datentypen bekommst du indem du die member Funktion c_str() von deinem string aufrufst. ( StringName.c_str(); )

Korowai

unregistriert

20

29.03.2015, 09:22

Hi,

der Ausschnitt ist entstanden, als ich gerade in der Zeile gefrickelt habe. Das mit der Klammer war schon klar,
mir ging es vor allem um den korrekten Abschluss des Teils :".c_str()", da wusste ich nicht, dass dieser einfach an
den Ausdruck angehängt wird.

Korrekt lautet es so:

C-/C++-Quelltext

1
2
 length3 = sprintf(temp3, "= %s", (restona_guldon.staatsform.c_str()));
                         TextOut(hDC, 200, 100, temp3, length3);


Programm gibt korrekt aus.

Super, jetzt gehts weiter, (bis zum nächsten Hänger)

Danke an alle,

Werbeanzeige