Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Compiler- und IDE-Forum ::  Problem mit error C2440 und error C2664     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Tobias Xy
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.03.2008
Beiträge: 5
Beitrag Tobias Xy Mitglied 16:18:49 10.04.2008   Titel:   Problem mit error C2440 und error C2664            Zitieren

Ich verwende als Compiler Visual C++ 9.0.
Nun zum Problem: Wenn ich folgenden Quelltext eingebe (aus dem Buch "C++ für Spieleprogrammierer") erscheinen zwei Fehlermeldungen: (Am Quelltext sollte es eigentlich nicht liegen, da er ja aus dem Buch stammt)
C/C++ Code:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// C++ für Spieleprogrammierer
// Listing 10.1
// Ein Windows-Grundgerüst
//

#include
<windows.h>

// Prototyp der Callback-Funktion
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam);

// Hauptprogramm
//

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
                    LPSTR lpcmdline, int ncmdshow)
{
  WNDCLASSEX windowclass; // Struktur für Fenstereigenschaften
  HWND       hWnd;        // Fenster-Handle
  MSG        message;     // Nachricht

  // Der Klassen-Name des Fensters ist frei wählbar

  const char szClassName[] = "Erstes Fenster";

  // Struktur mit gewünschten Eigenschaften füllen
  //

  // Größe der Struktur zwischenspeichern

  windowclass.cbSize = sizeof (WNDCLASSEX);

  // Fenster soll beim Verschieben neu gezeichnet werden
  windowclass.style = CS_HREDRAW | CS_VREDRAW;

  // Zeiger auf Callback-Funktion
  windowclass.lpfnWndProc = WindowProc;

  // Keine erweiterten Einstellungen
  windowclass.cbClsExtra = 0;
  windowclass.cbWndExtra = 0;

  // Instanz speichern
  windowclass.hInstance = hInst;

  // Icons und Cursor festlegen
  windowclass.hIcon   = LoadIcon (NULL, IDI_APPLICATION);
  windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);

  // Hintergrundfarbe festlegen
  windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;

  // Ein Menü brauchen wir nicht
  windowclass.lpszMenuName = NULL;

  // Klassenname angeben
  windowclass.lpszClassName = szClassName;

  // Fensterklasse registrieren
  if (!RegisterClassEx (&windowclass) )
    return (0);

  // Das Fenster erzeugen
  hWnd = CreateWindowEx (NULL,
                         szClassName,
                         "Das erste Fenster!",
                         WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                         100, 100,
                         300, 250,
                         NULL,
                         NULL,
                         hInst,
                         NULL);

  // Prüfen, ob alles glatt ging
  if (hWnd == NULL)
    return (0);

  // Der "Herzschlag" des Programms.
  // Hier werden alle Nachrichten abgeholt,
  // übersetzt und weitergeleitet.

  while (GetMessage (&message, NULL, 0, 0) )
  {
    TranslateMessage (&message);
    DispatchMessage (&message);

  }

  // Programm beenden
  return (int)(message.wParam);

} // WinMain


// Callback-Funktion zur Nachrichtenverarbeitung
//

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam)
{
  // Messages auswerten
  switch (message)
  {
    // Fenster schließen? (Auch Alt-F4)
    case WM_DESTROY:
    {
      // Nachricht zum Beenden schicken
      PostQuitMessage (0);
      return (0);

    }

    // Wurde eine Taste gedrückt?
    case WM_KEYDOWN:
    {
      // Ja, also je nach Taste verzweigen
      switch (wParam)
      {
        // Wurde "Escape" gedrückt?
        case VK_ESCAPE:
        {
          // Ja, also Nachricht zum Beenden schicken
          PostQuitMessage (0);
          return (0);

        }
      }
    } break;
  }

  // Die Nachricht wurde nicht von uns verarbeitet, also
  // von Windows verarbeiten lassen.

  return (DefWindowProc (hWnd, message, wParam, lParam) );

} // WindowProc
C/C++ Code:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// C++ für Spieleprogrammierer
// Listing 10.1
// Ein Windows-Grundgerüst
//

#include
<windows.h>

// Prototyp der Callback-Funktion
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);

// Hauptprogramm
//

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
LPSTR lpcmdline, int ncmdshow)
{
WNDCLASSEX windowclass; // Struktur für Fenstereigenschaften
HWND hWnd; // Fenster-Handle
MSG message; // Nachricht

// Der Klassen-Name des Fensters ist frei wählbar

const char szClassName[] = "Erstes Fenster";

// Struktur mit gewünschten Eigenschaften füllen
//

// Größe der Struktur zwischenspeichern

windowclass.cbSize = sizeof (WNDCLASSEX);

// Fenster soll beim Verschieben neu gezeichnet werden
windowclass.style = CS_HREDRAW | CS_VREDRAW;

// Zeiger auf Callback-Funktion
windowclass.lpfnWndProc = WindowProc;

// Keine erweiterten Einstellungen
windowclass.cbClsExtra = 0;
windowclass.cbWndExtra = 0;

// Instanz speichern
windowclass.hInstance = hInst;

// Icons und Cursor festlegen
windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);

// Hintergrundfarbe festlegen
windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;

// Ein Menü brauchen wir nicht
windowclass.lpszMenuName = NULL;

// Klassenname angeben
windowclass.lpszClassName = szClassName;

// Fensterklasse registrieren
if (!RegisterClassEx (&windowclass) )
return (0);

// Das Fenster erzeugen
hWnd = CreateWindowEx (NULL,
szClassName,
"Das erste Fenster!",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100,
300, 250,
NULL,
NULL,
hInst,
NULL);

// Prüfen, ob alles glatt ging
if (hWnd == NULL)
return (0);

// Der "Herzschlag" des Programms.
// Hier werden alle Nachrichten abgeholt,
// übersetzt und weitergeleitet.

while (GetMessage (&message, NULL, 0, 0) )
{
TranslateMessage (&message);
DispatchMessage (&message);

}

// Programm beenden
return (int)(message.wParam);

} // WinMain


// Callback-Funktion zur Nachrichtenverarbeitung
//

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
// Messages auswerten
switch (message)
{
// Fenster schließen? (Auch Alt-F4)
case WM_DESTROY:
{
// Nachricht zum Beenden schicken
PostQuitMessage (0);
return (0);

}

// Wurde eine Taste gedrückt?
case WM_KEYDOWN:
{
// Ja, also je nach Taste verzweigen
switch (wParam)
{
// Wurde "Escape" gedrückt?
case VK_ESCAPE:
{
// Ja, also Nachricht zum Beenden schicken
PostQuitMessage (0);
return (0);

}
}
} break;
}

// Die Nachricht wurde nicht von uns verarbeitet, also
// von Windows verarbeiten lassen.

return (DefWindowProc (hWnd, message, wParam, lParam) );

} // WindowProc
C/C++ Code:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// C++ für Spieleprogrammierer
// Listing 10.1
// Ein Windows-Grundgerüst
//

#include
<windows.h>

// Prototyp der Callback-Funktion
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam);

// Hauptprogramm
//

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
                    LPSTR lpcmdline, int ncmdshow)
{
  WNDCLASSEX windowclass; // Struktur für Fenstereigenschaften
  HWND       hWnd;        // Fenster-Handle
  MSG        message;     // Nachricht

  // Der Klassen-Name des Fensters ist frei wählbar

  const char szClassName[] = "Erstes Fenster";

  // Struktur mit gewünschten Eigenschaften füllen
  //

  // Größe der Struktur zwischenspeichern

  windowclass.cbSize = sizeof (WNDCLASSEX);

  // Fenster soll beim Verschieben neu gezeichnet werden
  windowclass.style = CS_HREDRAW | CS_VREDRAW;

  // Zeiger auf Callback-Funktion
  windowclass.lpfnWndProc = WindowProc;

  // Keine erweiterten Einstellungen
  windowclass.cbClsExtra = 0;
  windowclass.cbWndExtra = 0;

  // Instanz speichern
  windowclass.hInstance = hInst;

  // Icons und Cursor festlegen
  windowclass.hIcon   = LoadIcon (NULL, IDI_APPLICATION);
  windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);

  // Hintergrundfarbe festlegen
  windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;

  // Ein Menü brauchen wir nicht
  windowclass.lpszMenuName = NULL;

  // Klassenname angeben
  windowclass.lpszClassName = szClassName;

  // Fensterklasse registrieren
  if (!RegisterClassEx (&windowclass) )
    return (0);

  // Das Fenster erzeugen
  hWnd = CreateWindowEx (NULL,
                         szClassName,
                         "Das erste Fenster!",
                         WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                         100, 100,
                         300, 250,
                         NULL,
                         NULL,
                         hInst,
                         NULL);

  // Prüfen, ob alles glatt ging
  if (hWnd == NULL)
    return (0);

  // Der "Herzschlag" des Programms.
  // Hier werden alle Nachrichten abgeholt,
  // übersetzt und weitergeleitet.

  while (GetMessage (&message, NULL, 0, 0) )
  {
    TranslateMessage (&message);
    DispatchMessage (&message);

  }

  // Programm beenden
  return (int)(message.wParam);

} // WinMain


// Callback-Funktion zur Nachrichtenverarbeitung
//

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam)
{
  // Messages auswerten
  switch (message)
  {
    // Fenster schließen? (Auch Alt-F4)
    case WM_DESTROY:
    {
      // Nachricht zum Beenden schicken
      PostQuitMessage (0);
      return (0);

    }

    // Wurde eine Taste gedrückt?
    case WM_KEYDOWN:
    {
      // Ja, also je nach Taste verzweigen
      switch (wParam)
      {
        // Wurde "Escape" gedrückt?
        case VK_ESCAPE:
        {
          // Ja, also Nachricht zum Beenden schicken
          PostQuitMessage (0);
          return (0);

        }
      }
    } break;
  }

  // Die Nachricht wurde nicht von uns verarbeitet, also
  // von Windows verarbeiten lassen.

  return (DefWindowProc (hWnd, message, wParam, lParam) );

} // WindowProc

Die Anzeige darunter:
Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1>------ Erstellen gestartet: Projekt: Projektmappe2, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Main.cpp
1>c:\mein c++\visual studio 2008\projects\projektmappe2\projektmappe2\main.cpp(54) : error C2440: '=': 'const char [15]' kann nicht in 'LPCWSTR' konvertiert werden
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>c:\mein c++\visual studio 2008\projects\projektmappe2\projektmappe2\main.cpp(70) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [15]' in 'LPCWSTR' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>Das Buildprotokoll wurde unter "file://c:\Mein C++\Visual Studio 2008\Projects\Projektmappe2\Projektmappe2\Debug\BuildLog.htm" gespeichert.
1>Projektmappe2 - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
Code:
1
2
3
4
5
6
7
8
9
10
1>------ Erstellen gestartet: Projekt: Projektmappe2, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Main.cpp
1>c:\mein c++\visual studio 2008\projects\projektmappe2\projektmappe2\main.cpp(54) : error C2440: '=': 'const char [15]' kann nicht in 'LPCWSTR' konvertiert werden
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>c:\mein c++\visual studio 2008\projects\projektmappe2\projektmappe2\main.cpp(70) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [15]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>Das Buildprotokoll wurde unter "file://c:\Mein C++\Visual Studio 2008\Projects\Projektmappe2\Projektmappe2\Debug\BuildLog.htm" gespeichert.
1>Projektmappe2 - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
Code:
1
2
3
4
5
6
7
8
9
10
1>------ Erstellen gestartet: Projekt: Projektmappe2, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Main.cpp
1>c:\mein c++\visual studio 2008\projects\projektmappe2\projektmappe2\main.cpp(54) : error C2440: '=': 'const char [15]' kann nicht in 'LPCWSTR' konvertiert werden
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>c:\mein c++\visual studio 2008\projects\projektmappe2\projektmappe2\main.cpp(70) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [15]' in 'LPCWSTR' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>Das Buildprotokoll wurde unter "file://c:\Mein C++\Visual Studio 2008\Projects\Projektmappe2\Projektmappe2\Debug\BuildLog.htm" gespeichert.
1>Projektmappe2 - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Wo könnte das Problem liegen?
asc
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.01.2007
Beiträge: 5285
Beitrag asc Mitglied 16:31:15 10.04.2008   Titel:   Re: Problem mit error C2440 und error C2664            Zitieren

Tobias Xy schrieb:
Ich verwende als Compiler Visual C++ 9.0.
Nun zum Problem: Wenn ich folgenden Quelltext eingebe (aus dem Buch "C++ für Spieleprogrammierer") erscheinen zwei Fehlermeldungen: (Am Quelltext sollte es eigentlich nicht liegen, da er ja aus dem Buch stammt)


Doch es liegt am Quelltext, oder besser gesagt an den Projekteinstellungen.

In der Zeile...
C/C++ Code:
windowclass.lpszClassName = szClassName;
C/C++ Code:
windowclass.lpszClassName = szClassName;
C/C++ Code:
windowclass.lpszClassName = szClassName;

...weist du einem Zeiger auf einen Unicodestring [wchar_t*] einen Ansi-String [char*] zu. In den Projekteinstellungen lässt sich die Unicodeunterstützung ein und ausstellen (Bei dir ist sie aktiv).

Die Fehlermeldung ist ohnehin recht eindeutig.
Kurz: Zuweisung von dem einem Typ in einen den anderen ist nicht möglich (Und bitte ignoriere den Hinweis auf reinterpret_cast, in diesem Fall [und in vielen anderen] ist dieser vollkommen verkehrt).

_________________
in theory there's no difference between theory and practice. in practice there is. (yogi berra)

In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
Tobias Xy
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.03.2008
Beiträge: 5
Beitrag Tobias Xy Mitglied 16:36:38 10.04.2008   Titel:              Zitieren

Und wo kann ich die deaktivieren?
asc
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.01.2007
Beiträge: 5285
Beitrag asc Mitglied 19:04:19 10.04.2008   Titel:              Zitieren

Tobias Xy schrieb:
Und wo kann ich die deaktivieren?


Wenn ich mich nicht irre ist das der Zeichensatz in den Projekteinstellungen (Unicode gegen ich glaube MCSB oder wie es heißt austauschen)...

Sorry habe grad nicht die Einstellungen vor mir.

Aber dein Thema gehört eh nicht in das ANSI C++ unterforum, sondern eher in das Win32 oder Compilerforum. Vermutlich wird irgendwann ein Moderator den Thread entsprechend verschieben...

cu André

_________________
in theory there's no difference between theory and practice. in practice there is. (yogi berra)

In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
C++ Forumbot
Forumbot

Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 16166
Beitrag C++ Forumbot Forumbot 14:20:08 12.04.2008   Titel:              Zitieren

Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
C/C++ Forum :: Compiler- und IDE-Forum ::  Problem mit error C2440 und error C2664   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.