lukasz427 Temat założony przez niniejszego użytkownika |
STRING typem wbudowanym? » 2017-10-05 20:16:31 Cześć.
Właśnie zauważyłem, że nie muszę dodawać nagłówka biblioteki string (dyrektywą #include<string>), kiedy używam w programie obiektów klasy string.Czy robi to za mnie środowisko? Dodam że używam najnowszej wersji Code::Blocks? Nie powiem,że mi to przeszkadza niemniej jednak jestem dociekliwy.
Dodatkowo jeśli usunę nagłówek biblioteki iostream( #include <iostream>).Błąd pojawia się już w momencie tworzenia obiektu klasy string. Czy zatem biblioteka string została dołączona do biblioteki iostream?
Z góry dzięki.
Łukasz
|
|
Kinexity |
» 2017-10-05 20:24:25 string nie jest typem wbudowanym. W VS w nagłówku xstring (pewnie w CB jest coś podobnego) masz coś takiego: typedef basic_string < char, char_traits < char >, allocator < char > > string; Ale ten nagłówek nie jest połączony z definicją tej klasy, więc tak czy siak musisz załączyć <string>. (nie wiem czy to co napisałem jest właściwą i czy jest w pełni prawidłowo napisane) |
|
lukasz427 Temat założony przez niniejszego użytkownika |
» 2017-10-05 20:34:53 Może jeszcze dodam kod, który pochodzi z "symfonii". Wszystko działa. #include <iostream> using namespace std;
int main() { string poemat; unsigned int poprz_poj = poemat.capacity(); for( int i = 1; i < 500; i++ ) { poemat += 'A'; unsigned int akt_poj = poemat.capacity(); if( akt_poj != poprz_poj ) { cout << "Gdy liter k: " << i << " Zwiekszylem pojemnosc do: " << akt_poj << "(+" << akt_poj - poprz_poj << ")" << endl; poprz_poj = akt_poj; } } }
|
|
mateczek |
» 2017-10-05 21:14:16 jeśli nie piszesz programów na wiele platform jednocześnie to się tematem nie musisz przejmować. A kompilując na różne platformy. Windows, Android, Linux, czy RasberyPI, W końcu i tak będziesz musiał dołączyć includy jak przystoii. |
|
pekfos |
» 2017-10-07 13:02:18 Widocznie w <iostream> gdzieś jest dołączone <string>. Pod innym kompilatorem nie musi to zachodzić i program się nie skompiluje. |
|
kmlkamilek |
» 2017-11-29 23:40:21 Podobne pytanie padło na stackoverflow: "Do I have to include string beside iostream?" Najbardziej punktowana odpowiedź odpowiada na twoje pytanie, jednocześnie mówiąc ci o jednej z dobrych praktyk w C++. Yes, you have to include what you use. It's not mandated that standard headers include one another (with a few exceptions IIRC). It might work now, but might fail on a different compiler.
In your case, apparently <iostream> includes <string>, directly or indirectly, but don't rely on it. |
Do tego jeszcze opis z dokumentacji: Including <iostream> automatically includes also <ios>, <streambuf>, <istream>, <ostream> and <iosfwd>. |
Więc jak widzisz, iostream w twoim wypadku, dołączył nagłówek ze stringiem, ale standard tego nie gwarantuje. |
|
YooSy |
» 2017-11-30 12:09:58 Pod innym kompilatorem nie musi to zachodzić i program się nie skompiluje. |
np. W Visual Studio przejdzie deklaracja stringa przy załączonym iostream, ale już przy użyciu obiektu ze strumieniami przy kompilacji pojawia się błąd. Dobrze jest dodawać pliki nagłówkowe, których klas się używa, niż liczyć na fart. |
|
« 1 » |