Ĺadny brzuch
W pliku nagłówkowym mam deklaracje klasy, której składowymi są łańcuchy znakowe. Jeśli chcę zrobić np. coś takiego:
class klasa{
string mojstring;
int i;
//(..)
};
to wyrzuca mi błąd, że nie wie co znaczy string (czy jakoś tak). O ile pisząc w czystym c++ wystarczyło, że do pliku nagłówkowego dodałem #include <string> i było ok, ale już pisząc w builderze 6 [pod windows] nie jest tak łatwo. Nawet jak dodam <string>.... Co mam zrobić? Jaki plik dodać? Nie chcę dodawać całej bilbioteki VCL i chcę mieć deklaracje klasy w pliku nagłówkowym.
Z góry dziękuje...
zrob tak
#include <string>
using namespace std;
powinno dzialac
mozesz teraz deklarowac zmienne typu string
a makrodefinicja by ni wystarczyła?
No tak, ale użycie usingn namespace std; w pliku nagłówkowym może być niebezpieczne - przynajmniej tak twierdzi p. Bruce Eckel. Teraz się spieszę, ale w okolicach g. 13 mogę to poprzeć cytatem.... Podejrzewam, że rozwiązanie będzie raczej proste, ale.... No właśnie, trzeba mieć pomysł ;)...
#include <string> //... class klasa{ std::string mojstring; int i; //(..) };
A nie lepiej byłoby użyć typu AnsiString?
zeby uzyc AnsiString trzeba includowac vcl a on tego nie chcial robic.
Dzięki - pomogła metoda autorstwa pepsi. Czyli z dodaniem std:: przed stringa. Mam nadzieje, że jest to poprawne i bezpieczne :D.
zeby uzyc AnsiString trzeba includowac vcl a on tego nie chcial robic.
Aha - jeszcze mam jedno pytanie: "co zrobić, żeby funkcja mogła zwrócić tablicę stringów?"
Piszę tak:
string[5] zwroc(string s[5])
i wyrzuca mi błąd: "Declaration syntax error".
I co ja mam teraz 'biedny, nieszczęśliwy' zrobić? :) :unsure:
Np. /nie znam dobrze c++/
#include <iostream> #include <stdio.h> #include <conio.h> #include <string> using namespace std; typedef string stringi; stringi dodajstringi(string s1, string s2) { return s1+s2; } int main() { string nazwa; nazwa = dodajstringi("1","2"); cout << nazwa << endl; getch(); }
Tak, ale z tego, co się doczytałem, to funkcja zwróci jeden string - wynik dodawanie 2 stringów: return s1+s2;
A mi chodzi o to, żeby mi zwróciła cała tablicę znaków. W każdym razie dzięki za dobre chęci... :)
Gapa <_< ale zaraz coś wymyślę/znajd ;)
Aha - jeszcze mam jedno pytanie: "co zrobić, żeby funkcja mogła zwrócić tablicę stringów?"
Piszę tak:
string[5] zwroc(string s[5])
i wyrzuca mi błąd: "Declaration syntax error".
I co ja mam teraz 'biedny, nieszczęśliwy' zrobić? :) :unsure:
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
to wyrzuca mi błąd, że nie wie co znaczy string (czy jakoś tak). O ile pisząc w czystym c++ wystarczyło, że do pliku nagłówkowego dodałem #include <string> i było ok, ale już pisząc w builderze 6 [pod windows] nie jest tak łatwo. Nawet jak dodam <string>.... Co mam zrobić? Jaki plik dodać? Nie chcę dodawać całej bilbioteki VCL i chcę mieć deklaracje klasy w pliku nagłówkowym.
Z góry dziękuje...
zrob tak
#include <string>
using namespace std;
powinno dzialac
mozesz teraz deklarowac zmienne typu string
a makrodefinicja by ni wystarczyła?
No tak, ale użycie usingn namespace std; w pliku nagłówkowym może być niebezpieczne - przynajmniej tak twierdzi p. Bruce Eckel. Teraz się spieszę, ale w okolicach g. 13 mogę to poprzeć cytatem.... Podejrzewam, że rozwiązanie będzie raczej proste, ale.... No właśnie, trzeba mieć pomysł ;)...
#include <string> //... class klasa{ std::string mojstring; int i; //(..) };
A nie lepiej byłoby użyć typu AnsiString?
zeby uzyc AnsiString trzeba includowac vcl a on tego nie chcial robic.
Dzięki - pomogła metoda autorstwa pepsi. Czyli z dodaniem std:: przed stringa. Mam nadzieje, że jest to poprawne i bezpieczne :D.
zeby uzyc AnsiString trzeba includowac vcl a on tego nie chcial robic.

Aha - jeszcze mam jedno pytanie: "co zrobić, żeby funkcja mogła zwrócić tablicę stringów?"
Piszę tak:
string[5] zwroc(string s[5])
i wyrzuca mi błąd: "Declaration syntax error".
I co ja mam teraz 'biedny, nieszczęśliwy' zrobić? :) :unsure:
Np. /nie znam dobrze c++/
#include <iostream> #include <stdio.h> #include <conio.h> #include <string> using namespace std; typedef string stringi; stringi dodajstringi(string s1, string s2) { return s1+s2; } int main() { string nazwa; nazwa = dodajstringi("1","2"); cout << nazwa << endl; getch(); }
Tak, ale z tego, co się doczytałem, to funkcja zwróci jeden string - wynik dodawanie 2 stringów: return s1+s2;
A mi chodzi o to, żeby mi zwróciła cała tablicę znaków. W każdym razie dzięki za dobre chęci... :)
Gapa <_< ale zaraz coś wymyślę/znajd ;)
Aha - jeszcze mam jedno pytanie: "co zrobić, żeby funkcja mogła zwrócić tablicę stringów?"
Piszę tak:
string[5] zwroc(string s[5])
i wyrzuca mi błąd: "Declaration syntax error".
I co ja mam teraz 'biedny, nieszczęśliwy' zrobić? :) :unsure:
