Zgodnie z opisem w kursach C++ deklaruję zmienną typu String i chcę jej nadać jakąś wartość
String napis = "napis";
ale kompilator zwraca błąd
error: `String' undeclared (first use this function)
gdzieś w necie znalazłem, że na początku jest
#include
albo
#include
ale wywalało ten sam błąd.
O co chodzi? Gdzie jest błąd?
b4rtaz
(B4rtaz)
27 Sierpień 2007 10:35
#2
Wystarczyło trochę poszukać.
http://www.intercon.pl/~sektor/cbx/std/string.html
http://en.wikipedia.org/wiki/String_(C++
#include
#include
using std::string;
int main()
{
string Foo = "Lipsum.";
Foo += " Lorem.";
printf("%s",Foo.c_str());
};
Dobra w “czystym C++”, ale jak podpowiada temat chodzi mi o program z użyciem WinAPI.
borli
(Borli)
27 Sierpień 2007 11:29
#4
Nie ma znaczenia czy chodzi o WinAPI, czy nie. Jedyne o czym musisz pamiętać pisząc program, to że w bibliotece win używany jest typ PSTR, czyli char*. Wymaga to użycia funkcji składowej c_str klasy string.
Jakoś nie załapałem. To znaczy co muszę zrobić, żeby móc korzystać z typu string?
borli
(Borli)
27 Sierpień 2007 15:52
#6
Piszesz że korzystasz z WinAPI, chcesz też użyć typu string.
Czyli początek programu wygląda tak:
#include
#include
using namespace std; //lub using std::string
A przykład wykorzystania:
string tekst = "Aplikacja w C++";
SetWindowText(okno, tekst.c_str()); //korzystam z c_str, by "przerobić" na typ obsługiwany w WinAPI
AHA! Trzeba było tak od razu.
Zaraz spróbuję.
Dzięki
EDIT:
Działa.
I jeszcze jedno. Jak zrobić coś takiego
String napis = "C++ to język programowania wysokiego poziomu";
napis += " posiadający stringi";
(z Wikipedii), bo próbowałem tak
string napis = "Napis";
napis += " Dłuższy napis";
i tak
string napis = "Napis";
napis.c_str += " Dłuższy napis";
, i nic, nie kompiluje
borli
(Borli)
27 Sierpień 2007 17:01
#8
Po pierwsze: c_str jest funkcją! Czyli wymaga podania jeszcze nawiasów:
obiekt.c_str();
Po drugie: to co c_str zwróci jest typem char*, a do niego nie istnieje przeładowany operator +=. Dlatego tak długo jak chcesz wygodnie operować na stringach korzystaj z funkcji typu string, a na końcu wywołuj c_str.
dobra, ale kod:
string napis = "Napis";
napis += " Dłuższy napis";
też nie działa…
borli
(Borli)
27 Sierpień 2007 17:20
#10
A możesz napisać co znaczy że nie działa? Kompilator wyrzuca błędy, czy wynik jest nie taki jak być powinien. Oczywiście napisz też czym kompilujesz.
b4rtaz
(B4rtaz)
27 Sierpień 2007 19:37
#11
Może wypadało by troszeczkę się zaznajomić, z typem char ? Windowsowskie API na nim się opiera. Funkcja obj.c_str() zwraca ciąg tekstowy jako tablice typu char.
Kompiluję przy pomocy Dev-C++.
Na taki kod:
string napis = "Tekst";
napis += " numer 1";
Zwraca błędy:
error: expected constructor, destructor, or type conversion before ‘+=’ token error: expected ,' or
;’ before ‘+=’ token
GA_Thrawn
(Szczepanskimarek)
28 Sierpień 2007 12:16
#13
#include
#include
using namespace std;
int main()
{
string napis="aaa";
napis+=" bbbb";
cout<
system("PAUSE");
}
Powyższy kod działa bez problemu. Skopiuj u siebie i sprawdź czy działa, a jak nie to podaj jaki jest błąd.
GA_Thrawn
(Szczepanskimarek)
28 Sierpień 2007 12:32
#15
Mogę więc wnioskować że albo nie dodałeś linijki
using namespace std;
albo piszesz słowo “string” z dużej litery przy definiowaniu zmiennej i kompilator oczekuje nowej funkcji;
Powodzenia w dalszym programowaniu
Używam using std::string
i piszę string (małą literą)
Próbowałem też z using namespace std;
ale ten sam błąd ;(
borli
(Borli)
28 Sierpień 2007 13:01
#17
rozwalkompa:
Kompiluje, działa.
To jest ten błąd, czy nie? Pisałeś że w zamieszczonym kodzie błędy nie wyskakują.
W tym przykładowym (który miał sprawdzić czy kompilator jest w porządku) nie, ale tego z użyciem WinAPI nadal nie kompiluje.
borli
(Borli)
28 Sierpień 2007 17:36
#19
Ale co znaczy z użyciem WinAPI?
W Devie (wersja 4.9.9.2) rozszerzyłem przykładowy Windowsowy program, użyłem typu string, oraz oczywiście WinAPI i działa.
http://wklej.org/id/9035146924 - ten program (pokazuje komunikat po naciśnięciu klawisza)
Teraz działa! Po prostu w złym miejscu dawałem powyższe kody!
Dzięki, pozdrawiam