PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : linker && kdevolp



14-04-2000, 16:30
Folgendes Problem:
ich moechte in kdeveloper die Standard- C++Container verwenden wie z.B. g++/map.h, g++/set.h, g++/String.h. Das klappt bis zum kompilieren auch sehr gut, beim Erstellen (also Linken) faellt mir jedoch String.h auf die Nase. Ich habe mal ein kleines Bsp. beigefuegt:

#include <iostream.h>
#include <stdlib.h>
#include &lt;g++/String.h&gt;
#include &lt;g++/set.h&gt;

int main(int argc, char *argv[]) {
String wert;
set &lt;String&gt; myset;

for(int i=0;i<=100;i++) {
wert = itoa(i);
myset.insert(wert);
}
return 0;
}

Der Compiler meckert zwar ein wenig:
Warning:implicit declaration of function 'int itoa(..)'
aber das sollte uns hier nicht stoeren.

Wichtig sind die Meldungen des Linkers. Dieser meckert mir "undefined refernce to String::..." an. ( Konstruktor, Destruktor, Operator usw.). Selbst als ich schlicht und ergreifend nur eine String-Variable definiert habe, wurden "undefined"-Errors erzeugt. Wenn ich jedoch z.B. set oder map alleine einfuege und mit int oder double fuelle, ist alles groovy und o.k., das Programm kann gelinkt und ausgefuerht werden.

Wo mache ich den Fehler?

Fuer Antworten waere ich wirklich dankbar,

TheCube

P.S.: Kann mir jemand sagen, wie ich in diesen Foren spitze Klammern setzen kann?
------------------


[Diese Nachricht wurde von TheCube am 14. April 2000 editiert.]

[Diese Nachricht wurde von TheCube am 17. April 2000 editiert.]

thommy
17-04-2000, 07:25
Um spitze Klammern (und alles, was als HTML-Tag interpretiert werden würde) zu erzeugen, musst Du HTML-Code verwenden:

&<\b>lt[b]; für "kleiner als",
&gt; für "größer als", usw.

Und zum String...
<pre>
#include &lt;string&gt;
#include &lt;g++/set.h&gt;

int main(int argc, char *argv[]) {
string wert;
set &lt;string&gt; myset;

...
</pre>

Thomas

17-04-2000, 10:56
Für die Beantwortung wg. &gt; und &lt; vielen Dank, allerdings hatte ich im Originalcode schon set&lt;String&gt; stehen. Ich hab dies ja schon oft bei Borland C++ gemacht und lt. Standard muss es ja moeglich sein.

Hagen von Tronje
17-04-2000, 20:51
Hi,

wenn wir schon bei ANSI-C++ sind:

std::string wert;

und

itoa() ist keine Standard-Funktion!

http://www.linuxforen.de/ubb/wink.gif

Hagen

thommy
17-04-2000, 23:27
Du solltest die Klasse string anstelle von String verwenden, denn erstere ist Standard-C++.

Und bei Verwendung der Compiler egcs Version &gt; 1.1 bzw. gcc Version &gt; 2.8 können die Header laut Standard angegeben werden (z.B. #include &lt;set&gt;)

Thomas

18-04-2000, 07:50
Herzlichen Dank für Eure Hilfe. Mit itoa habe ich gerade eben auch gemerkt. Mein bis dato Standardcompiler ist/war Borland C++ und da ist itoa() in stdlib vorhanden. In meinem Wahn dachte ich, dies sei dann auch Standard. Mea culpa.

TheCube