Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » 'const char *' kann nicht in 'char' konvertiert werden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
12.10.2007, 18:57 Uhr
~Markus E.
Gast


hi

wenn ich


C++:
inline char*    Q_strrchr (const char *s, char c)                    { return strrchr( s, c ); }



oder


C++:
inline char    Q_strrchr (const char *s, char c)                    { return strrchr( s, c ); }



schreibe, kommt immer der selbe Fehler:


Code:
error C2440: 'return': 'const char *' kann nicht in 'char' konvertiert werden




Ich wäre sehr dankbar, wenn mir jemand bitte das richtig schreiben könnte.
Es ist für ein Spiel mit dx 9 und da hab ich das Problem >.<

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.10.2007, 20:17 Uhr
0xdeadbeef
Gott
(Operator)


Beim zweiten ist das logisch, das erste sollte eigentlich funktionieren...<string.h> bzw. <cstring> sind included, richtig?

Es ist schwer, das ohne Code zu sagen. Schreib mal ein kleines Programm, das den Fehler reproduziert, dann kann ich dir genaueres sagen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.10.2007, 22:13 Uhr
xXx
Devil


Hmm muss nen const -Value zurück geben wenn der Parameter s const ist. s. www.cplusplus.com/reference/clibrary/cstring/strrchr.html


C++:
#include <cstring>

inline const char*    Q_strrchr (const char* str, char c)                    { return std::strrchr(str, c); }
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.10.2007, 22:21 Uhr
~Markus E.
Gast


achso, habs dann auch schon hinbekommen^^ danke aber vielmals für die Hilfe!

ich habe noch eine frage was ich gegen:


Code:
1>LIBCMT.lib(calloc.obj) : error LNK2005: _calloc ist bereits in memoverride.obj definiert.
1>LIBCMT.lib(realloc.obj) : error LNK2005: _realloc ist bereits in memoverride.obj definiert.
1>LIBCMT.lib(heapinit.obj) : error LNK2005: __heap_init ist bereits in memoverride.obj definiert.
1>LIBCMT.lib(heapinit.obj) : error LNK2005: __heap_term ist bereits in memoverride.obj definiert.
1>LIBCMT.lib(heapinit.obj) : error LNK2005: __amblksiz ist bereits in memoverride.obj definiert.
1>LIBCMT.lib(sbheap.obj) : error LNK2005: __get_sbh_threshold ist bereits in memoverride.obj definiert.
1>LIBCMT.lib(sbheap.obj) : error LNK2005: __set_sbh_threshold ist bereits in memoverride.obj definiert.
1>Panels.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual class vgui::Panel * __thiscall vgui::Panel::HasHotkey(wchar_t)" (?HasHotkey@Panel@vgui@@UAEPAV12@_W@Z)".
1>Panels.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall vgui::Panel::OnKeyTyped(wchar_t)" (?OnKeyTyped@Panel@vgui@@UAEX_W@Z)".
1>../Binary/bin.dll : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.



machen kann.
Ohne diese Errors würd mein programm funktionieren.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.10.2007, 01:28 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Einmal würde ich sagen "in der falschen reihenfolge headers inkludiert"...

Für die nicht aufgelösten Symbole musst du noch die entsprechenden Dateien deinem Projekt hinzufügen (damit der Linker diese auch auflösen kann).
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.10.2007, 14:48 Uhr
~Markus E.
Gast


Danke für die Antwort


Zitat von Windalf:
Einmal würde ich sagen "in der falschen reihenfolge headers inkludiert"...



Wie meinst du das?


Zitat von Windalf:

Für die nicht aufgelösten Symbole musst du noch die entsprechenden Dateien deinem Projekt hinzufügen (damit der Linker diese auch auflösen kann).


Uh.. wird schwieriger zu verstehen sein
Kannst du mir eventuell noch bitte sagen(zu beiden bitte), wo ich was machen muss, zbsp. beim Zweiten Problem .. wo ich die entsprechende dateien zu meinem projekt hinzufügen kann?


mfg
markus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.10.2007, 15:27 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Wie meinst du das?


Naja das ganze sieht ja verdammt nach Visual Studio aus. Da hatte ich teilweise auch die Probleme, dass man einige Heaer nicht zu oft (weil die in anderen schon enthalten waren und anscheinend Includeguards vergessen wurden) oder in einer bestimmten reihenfolge inkludieren sollte.

Zu dem Thema aufgelöste Symbole...

Du verwendest in deinem Programm Funktionen/Methoden die zwar deklariert sind (also der kompiler weiß was die für Datentypen übergeben bekommen und was die ggf zurück liefern) aber die eigentliche implementierung fehlt dann dem linker, damit der dein Programm fertig basteln kann.

Also in deinem Fall z.B.

C++:
HasHotkey(wchar_t)


wo ist das ding denn her? Die kenne ich nicht. Also entweder hast du das ding selber geschrieben und musst dem projekt noch die cpp datei dazu mitgeben oder du verwendest eine bibliothek die ein anderer geschrieben hat. Dann wird der (wahrscheinlich ist das ganze ja auf dynamisch gelinkt angelegt) noch die zugehörige *.lib datei in seinem projekt haben wollen um dem linker zu beruhigen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.10.2007, 15:36 Uhr
0xdeadbeef
Gott
(Operator)


Fehler der Form

Code:
1>LIBCMT.lib(sbheap.obj) : error LNK2005: __get_sbh_threshold ist bereits in memoverride.obj definiert.


heißen aber, dass Symbole doppelt definiert sind. Was für mich daran seltsam aussieht, ist vor allem, dass reservierte Symbole, die nur in Compilerimplementierungen benutzt werden dürfen, scheinbar in einem deiner eigenen Module erneut definiert sind - so als hätte der Compiler die Standardbibliothek schon statisch an das Modul gelinkt. Was so ziemlich überhaupt keinen Sinn ergäbe.

Ich habe vergleichbare Dinge unter Windows mal mit statischen Bibliotheken gesehen, im Zusammenhang mit wx - da beschwerte sich der Compiler darüber, dass Symbole sowohl in libcmt als auch in msvcrt definiert seien, was passieren kann, wenn dein Projekt gegen eine Bibliothek gelinkt werden soll, die mit anderen Runtime-Einstellungen (Das sind die Multithreaded(-Debug)-bzw. Multithread(-Debug)-DLL-Dinger) kompiliert wurde - dann linkt der unter Umständen zwei verschiedene Runtimes mit den gleichen Symbolen gegeneinander und weiß nicht, welche er benutzen soll. Aber Linken an .obj-Dateien? Das scheint mir etwas weit hergeholt. Includest du irgendwelche privaten Header, die Funktionsdefinitionen direkt inline und trotzdem nicht statisch haben oder so?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.10.2007, 16:30 Uhr
~Markus E.
Gast


@Windalf:

Ist auch VS 2005 Professional
Zum ersten: ich sehe doch nirgendwo in meinem Projekt,dass die Header zweimal inkludiert sind .. muss aber trodzdem nachschauen

meinst du aber sowas zbsp.:


C++:
// main.cpp od. .h
#include <XYZ.h>

// testdatei.h od. .cpp
#include <XYZ.h>


?

zum zweiten:
also das ist schon ein fertiges Projekt, aber nicht von mir geschrieben, deswegen das copyright


@0xdeadbeef:

hab auch alles im Release Ordner gelöscht(alle .obj dateien), half aber trodzdem nicht

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.10.2007, 17:01 Uhr
0xdeadbeef
Gott
(Operator)


Ne, header haben in aller Regel include guards, das sollte also nichts schaden.

Ich meinte irgendwelche inline-Dingviecher, die eigentlich nie dazu gedacht waren, benutzt zu werden, und externe Funktionsdefinitionen beinhalten. Oder sowas in der Art. Besonders wahrscheinlich scheint mir das aber nicht. Irgendwas ist an dem Projekt auf jeden Fall seltsam - memoverride.obj enthält Symbole, die die Standardbibliothek auch enthält, und jetzt weiß der Linker nicht, welches Symbol er benutzen soll.

Hmm...wenn ich mir den Namen so ankucke, ist das evtl. sogar gewollt...seltsam. Versuch mal, das ganze mit ner Multithreaded(-Debug)-Dll-Runtime zu kompilieren, ich glaube, dann nimmt der Linker die fest eingelinkten Symbole. Ganz sicher bin ich mir da aber nicht, der Windows-Linker ist da ziemlich seltsam drauf, mit dem ganzen Stubs-Gehabe und so. Ist schwer zu durchschauen, was wie und womit funktioniert \ Spiel mal ein bisschen mit den Einstellungen rum.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: