Kyriet Temat założony przez niniejszego użytkownika |
Code::Blocks, przekazywanie ścieżki do pliku przez string ( plik.open( string ) ); » 2014-01-27 20:15:33 Witam. Otóż mam następujący, banalny problem. Od kiedy pamiętam piszę w C++ na Visual Studio, teraz zostałem zmuszony na chwilową przesiadkę na Code::Blocks. Ogromne było moje zdziwienie, gdy zobaczyłem, że program, który nie miał nawet warninga w Visual C++ w Code::Blocks zasypuje się błędami (niby ten sam język C++, a jednak...). Zauważyłem, że problem jest następujący: próbując otworzyć lub stworzyć plik za pomocą: plik.open( jakis_string, ios::in ) w takim wypadku Code::Blocks wyrzuca błąd, że ścieżką pliku nie może być string, tylko łańcuch znaków (WTF?), a tak dokładnie to: |11|error: no matching function for call to 'std::basic_fstream<char>::open(std::string&, const openmode&)' , czyli jak zgadują muszę sam je wprowadzić. Problem w tym, ze jest to całkowicie bezużyteczne i od wielu lat przekazywałem ścieżkę pliku przez string i nie było z tym problemu. Więc zwracam się do was, przyjaciele korzystający z Code::Blocks, jak w inny sposób zrobić, aby użytkownik sam wpisywał nazwę pliku, lub ścieżkę do utworzenia, bo skoro string mu nie pasuje, to jak ? Pracuję na najnowszej wersji Code::Blocks z kompilatorem GNU GCC Compiler... Przykładowy program, który według Code:Blocks jest błędny. #include <iostream> #include <fstream>
using namespace std;
int main() { fstream plik; string sciezka = "plik.txt"; plik.open( sciezka, ios::out ); return 0; } I błąd w linijce plik.open( sciezka, ios::out ); taki sam jak powyżej. Dla porównania, ten sam kod w Visual Studio działa poprawnie i w pliku z programem tworzy plik o nazwie "plik.txt". |
|
leon_w |
» 2014-01-27 20:25:43 Po nazwie pliku dodaj ".str()" "sciezka.str()" i powinno śmigać. |
|
Kyriet Temat założony przez niniejszego użytkownika |
» 2014-01-27 20:33:05 #include <iostream> #include <fstream>
using namespace std;
int main() { fstream plik; string sciezka = "plik.txt"; plik.open( sciezka.str(), ios::out ); return 0; } W tym wypadku wypluwa mi następujący komunikat. |10|error: 'std::string' has no member named 'str' |
|
RazzorFlame |
» 2014-01-27 20:33:10 Leon_W - chodziło ci raczej o (char*)(tekst.c_str()) |
|
Kyriet Temat założony przez niniejszego użytkownika |
» 2014-01-27 20:34:29 RazzorFlame, wybacz, ale z tego co napisałeś (char*)(tekst.c_str()) nic nie rozumiem :3
EDIT: Zaraz zaraz, juz się domyśliłem, po prostu c_str(). Dzięki wam za pomoc, widzę, że początki z nowym środowiskiem będą baardzo trudne. Ciekawe co jeszcze mnei spotka, przy kompilacji moich programów napisanych w Visual Studio. |
|
leon_w |
» 2014-01-27 20:38:32 oj fakt, sorki. miało być "c_str()" |
|
Monika90 |
» 2014-01-27 20:57:28 Zwyczajnie nie włączyłeś zgodności ze standardem ISO C++. Należy dodać -std=c++11 do opcji kompilacji. |
|
Kyriet Temat założony przez niniejszego użytkownika |
» 2014-01-27 21:09:42 Skoro już tu jestem, to skorzystam z okazji i zapytam o jeszcze jedną sprawę, która występuje u mnie w Visual Studio. Moją uwagę zwróciły 2 fakty: 1. Ikonka pliku projektu zawiera w sobie liczbę 11 (Czyżbym podświadomie stworzył projekt C++11 ?) 2. Po około pół godziny pisania kodu w pewnym momencie po wpisaniu std::cout i w tym momencie naciskam spację aby dodać operator << lecz, gdy już nacisnę spację, to nagle std::cout zamienia się w std::wcout . Szukałem w internecie coś na temat tych wcoutów i wstringów, ale niczego sensownego się nie dowiedziałem, a chodzi mi głównie o różnice. Bo z moich wstępnych badań wynika, że cout i wcout to jest to samo... nie wiem jak z wstringiem. Nie liczę, że ktoś będzie mi tutaj tłumaczył o co z tym wszystkim chodzi, tylko chcę wiedzieć, czy ja słusznie non stop walczę, aby środowisko nie sugerowało mi używania wcoutów, czy to nie ma sensu. Pozdrawiam. |
|
« 1 » 2 |