Type string could not be resolved
-
Hi,
ich hätte mal eine kurze Frage die sicher schnell beantwortet ist.
Ich hatte bisher eine cpp-Datei, in der folgendes stand:
#include <string> string function(...) { .... }
Das hat auch funktioniert wie man es erwartet. Nun habe ich zu meiner cpp-Datei eine Header-Datei .hpp erstellt und die Deklaration da rein:
#ifndef SIMULINKTEST_HPP_ #define SIMULINKTEST_HPP_ #include <string.h> #include <stdlib.h> #include <sstream> #include <iostream> #include <string> #include <stdio.h> #include <engine.h> #include "matlab_wrapper.h" #define BUFSIZE 256 string int_to_string(int i); int main(); #endif /* SIMULINKTEST_HPP_ */
Und in der cpp-Datei halt einfach ein #include datei.hpp
Jetzt erkennt er aber in der .hpp-Datei den String nicht mehr als Datentyp. Woran kann das liegen?
-
1. Es ist std::string, nicht string.
2. Das .h Suffix bei Standardheadern ist falsch.
-
Thanks, es war natürlich wieder die einfachste aller Lösungen :-). In der cpp hatte ich ein using namespace std drin..
PS: Wieso ist das .h falsch? Wenn ich es wegmache findet er die includes nicht.
-
Die C-Header haben in C++ kein .h-Suffix, sondern ein c-Prefix.
Also nicht
#include <string.h> #include <stdlib.h> #include <stdio.h>
sondern
#include <cstring> #include <cstdlib> #include <cstdio>
Aber bist du dir sicher, dass du die überhaupt willst/brauchst?
-
zu langsam
-
mikemodanoxxx schrieb:
PS: Wieso ist das .h falsch? Wenn ich es wegmache findet er die includes nicht.
Die .h-Header sind Kompatiblitätsheader zur Sprache C. Derzeit ist es nicht falsch, diese zu benutzen, aber es ist veraltet und es kann sein, dass sie später entfernt werden. In C++ wird aus dem Headern der C-Standardbilbiothek
xyz.h
stattdessen eincxyz
mit annähernd gleichem Inhalt. Aber nur annähernd: Die C++-Versionen haben oftmals noch weitere Überladungen der Funktionen die oft ganz nützlich sind und die Funktionen liegen im Namespace std statt im globalen Namensraum (Bei vielen Implementierungen sind sie aber trotzdem zusätzlich im globalen Namensraum). Außerdem hatten sich die C und die C++ Versionen der C-Standardbibliothek lange Zeit auseinander entwickelt, seit C++11 und C11 ist das aber wieder recht einheitlich geworden.
Sei dir auch im klaren, dass der Header string.h bzw. cstring überhaupt gar nichts mit std::string aus dem Header string zu tun hat. Da stehen Funktionen zur Arbeit auf nullterminierten char-Arrays, wie man sie in C für Zeichenketten benutzt. In C++ braucht man die quasi nie!
Gleiches gilt für sehr viele der anderen Header dieser Sorte. In cstdlib ist ja noch das eine oder andere Schätzchen und ctime ist auch nett, aber cstdio ist eigentlich komplett durch die iostreams ersetzt.
edit: Viel zu langsam.
-
SeppJ schrieb:
Sei dir auch im klaren, dass der Header string.h bzw. cstring überhaupt gar nichts mit std::string aus dem Header string zu tun hat. Da stehen Funktionen zur Arbeit auf nullterminierten char-Arrays, wie man sie in C für Zeichenketten benutzt. In C++ braucht man die quasi nie!
Das musst du noch mal erklären, warum die Sachen aus dem Header nichts mit std::string zu tun haben. Oder meinst du damit nur, dass man bei C++ quasi nicht mehr auf den nullterminierten char-Arrays arbeiten muss weil es genug "native" Funktionen für den Datentyp string gibt?
Jedenfalls danke für eure Hilfe. Ich habe lange nix mehr mit C++ gemacht und muss mich da erstmal wieder reinkämpfen
edit: hat sich erledigt, habs nachgelesen.