string.h und <string>
Ich versuche, eine Bibliothek zu errichten, die in einem legacy-C++ - Projekt. Plattform power-pc mit gcc compiler.
Der compiler gibt ein build-Fehler ähnlich zu diesem: Fehler: string: Keine solche Datei oder Verzeichnis oder Fehler: vector: Keine solche Datei oder Verzeichnis.
-
Mein Verständnis ist, dass es ist nicht in der Lage, suchen Sie die standard-Bibliothek. Wo sind die standard-Bibliothek-Dateien normalerweise befinden und in welchem format? Ist es *.h oder eine andere? Ich habe gesucht auf internet, aber ich glaube nicht, dass ich es völlig verstehe.
-
Den Teil verwirrend ist, dass eine andere Bibliothek in das gleiche Projekt mit der gleichen Quellcode-Datei baut prefectly in Ordnung. Dies lässt mich vermuten, dass möglicherweise die makefiles für diese beiden Projekte unterschiedlich sind, wo man in der Lage IST zu suchen, die std-lib, andere nicht. Aber ein kurzer Vergleich b/w die beiden wollten sich nicht um offensichtliche Unterschiede. Alle anderen Gedanken auf diese bitte?
-
Schließlich habe ich gerade gelernt, dass string.h ist für c-style-strings und string für C++ - std-lib. Ist es ok, Sie zu mischen, also eine Quelldatei #include string.h, und auch #include string implizit durch wie einige andere Datei? Ich Frage, weil das ist die gleiche situation, in der Datei, die nicht Gebäude.
Dank.
Fehlermeldung:
Kompilieren SOURCE_FILE.cpp
In der Datei enthalten, aus SOURCE_FILE.cpp:3:
HDR_FILE.h:1: error: string: Keine solche Datei oder Verzeichnis
HDR_FILE.h:2: Fehler: vector: Keine solche Datei oder Verzeichnis
CODE IN SOURCE_FILE.cpp
#include <stdlib.h>
#include <string.h>
#include "fileABC.h"
using namespace std;
//Other code
CODE IN HRD_FILE.h
#include <string>
#include <vector>
#include <hdr.h>
#include <hdr-cseq.h>
//... OTHER FILES ETC.
- Nur um sicher zu sein: Sie kompilieren den C++ - code mit
g++
und nichtgcc
, richtig? - Wo ist der code?
- bitte zeigen Sie ein abgespeckte version von Ihrem Programm.
- Es ist das kompilieren mit gcc D. H. powerpc-eabi-gcc, aber es ist der gleiche compiler, der erfolgreich gebaut, die andere Bibliothek, die mit dem gleichen Quellcode-Datei.
- verwenden
g++
zu kompilierenC++
,gcc
zu kompilierenC
.gcc
kompiliert C++ - Quellen, wenn es autodetects die Sprache (basierend auf Datei-Endung), aber es wird nicht verbinden Sie es richtig, und wenn es falsch erkennt eine Datei, es wird Ihnen alle Arten von seltsamen Fehler, einschließlich nicht finden, standard gehören. - Vielen Dank an alle die sich Zeit nahm, um zu Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Dateien nicht erkannt werden als C++ - source-code, dann kann man Fehler wie diese. Die c++ - Dateien mit dem Namen mit einer entsprechenden Dateiendung?
cat test.c
gcc test.c
Den oben aufgeführten Befehl zum kompilieren des C-Codes, aber nicht in C++. Denken Sie daran, dass diese sind zwei verschiedene Sprachen. Zum erstellen von C++ - Programmen müssen Sie sagen dem compiler, dass die source ist C++ eine oder andere Weise. Wenn Sie g++ wird automatisch angenommen Dateien mit '.c' Erweiterungen sind in C++ (zumindest meine version nicht. Oder Sie können feststellen, dass der compiler die C++ durch die übergabe
-x c++
rechts, bevor Sie übergeben Sie die Datei. Sie müssen auch sagen, den linker an den C++ - Bibliothek. g++ tut dies auch automatisch, oder Sie können übergeben, die linker-flag-lstdc++
.Den harten Weg:
gcc -x c++ - test.c -lstdc++
Einfach:
g++ test.c
Antwort auf deine Letzte Frage, können Sie frei mischen
<string.h>
und<string>
(aber Sie sollten wahrscheinlich verwenden<cstring>
statt<string.h>
).Der Sprache C-string ist anders als die C++ - std::string.
Die Sprache C Typ string ist eine Folge von Zeichen, terminiert durch eine null, null, '\0', Charakter. Die Funktionsdeklarationen für die Verwaltung dieser Daten-Struktur sind in
<string.h> or <cstring>
je nachdem, ob Sie kompilieren als C oder C++ bzw..C++ std::string-Typ ist ein container für Zeichen. Die eigentliche Implementierung kann variieren zwischen Compiler, sondern die Schnittstelle nicht. Die Methoden von std::string deklariert sind, in
<string>.
muss Der compiler für das kompilieren der C++ - Sprache.C++ std::string bietet Methoden für die Generierung Sprache C-strings und auch für die Erstellung von C++ - strings aus der Sprache C-style strings. Lesen Sie auf der Standard-Template-Library für weitere Informationen.
Auch, das Web für die Suche "C++ FAQs". Das ist Pflichtlektüre vor der Programmierung in der Sprache C++. Es gibt auch ein FAQ für die C-Sprache zu.