Warsztat » Forum

[Programowanie] proble z .c_str

Feb 9, 2008 | pik_pok |
17 wypowiedzi na 2 stronach:
1 2
pik_pok
Feb 9, 2008

proble z .c_str

Hej, mam problem z ofstreamem

Kiedy uzywam zapis.open("c:\jakas sciezka");  to jest ok
ale kiedy utworze sobie stringa

string sciezka = "c:\jakas sciezka";
zapis.open(sciezka.c_str);

to wywala mi error C2228: left of '.c_str' must have class/struct/union

kuba1900
Feb 9, 2008

Odp: proble z .c_str

No i nic dziwnego że wywala error...
c_str() a nie c_str
pik_pok
Feb 10, 2008

Odp: proble z .c_str

zapis.open( nazwa.c_str()) tez sprawdzałem;
zapis.open( nazwa.c_str() ,ios:in); tez nie ;/
Cataclysm
Feb 10, 2008

Odp: proble z .c_str

A na pewno załączyłeś <string>? i masz using namespace std?
pik_pok
Feb 10, 2008

Odp: proble z .c_str

tak , pozatym wczesniej kompilowałem z samym stringiem i było ok , problem mam tylko z zapis.open( nazwa.c_str() );  ???
cybek
Feb 10, 2008

Odp: proble z .c_str

Cytat:

tak , pozatym wczesniej kompilowałem z samym stringiem i było ok , problem mam tylko z zapis.open( nazwa.c_str() );   ???

Może kolizja nazw? Pokaż trochę więcej kodu.
Liosan
Feb 11, 2008

Odp: proble z .c_str

dziwne, że wydaje Ci się, że to problem z ofstream - ja bym strzelał, że z c_str(), a open() nie ma tu nic do rzeczy. Sprawdź, czy działa printf("%s\n",sciezka.c_str());

a ta sciezka na pewno jest wlasnie tak zadeklarowana? a nie np. string *sciezka? :)

Liosan
LOR
Feb 12, 2008

Odp: proble z .c_str

Zrób casta na const char* np ofstream fout(static_cast<const char*>(napis.c_str())). Jak stringa nie rozpoznaje to pewnie std:: zapomniałeś?
moraxu
Feb 10, 2008

Odp: proble z .c_str

Może to wina tego, że trzeba dać dwa ukośniki ?

"C:\\sciezka\\dalsza_sciezka\\plik_tekstowy.txt"

:)
Tobix10
Feb 10, 2008

Odp: proble z .c_str

Ja stawiam na brak std:: albo średnika, w którymś miejscu. Przed albo po deklaracji stringa, albo on sam nie ma.
Aithne
Feb 11, 2008

Odp: proble z .c_str

Cytat:

Zrób casta na const char* np ofstream fout(static_cast<const char*>(napis.c_str())).
std::basic_string<T, CharT, Alloc>::c_str() zwraca właśnie const T*. Ja rozumiem, rzutowanie z X na X jest dozwolone, ale nie należy się tym zanadto podniecać...
@Xion: Racja.
pik_pok
Feb 12, 2008

Odp: proble z .c_str

ok problem rozwiązany dzieki za wszystkie odpowiedzi  :)
Xion
Feb 14, 2008

Odp: proble z .c_str

Cytat:
std::basic_string<T, CharT, Alloc>::c_str() zwraca właśnie const char*

O ile T to char, rzecz jasna :)
LOR
Feb 19, 2008

Odp: proble z .c_str

Cytat:
rzutowanie z X na X jest dozwolone, ale nie należy się tym zanadto podniecać...

Jak chcesz pisać przenośny kod to czasami warto się tym podniecić. Ale nvm, bo się offtop zrobi.
Aithne
Feb 20, 2008

Odp: proble z .c_str

Ale co, jak, gdzie i po co? Jeśli kod ma być 100% przenośny, to używamy typów pokroju int32_t z <stdint.h> (ojeje, w C++ tego nie ma...) i nie trzeba rzutować z X na X.
LOR
Dec 13, 2007

Odp: proble z .c_str

Takie rzutowanie jeśli nie będzie potrzebne to kompilator je wytnie i nie będzie miało wpływu na wydajność. A jeśli będzie potrzebne (inna implementacja może nieść za sobą inne T) to wtedy się skompiluje bez zbędnego zaglądania w kod. A jeśli chcesz używać typu int32_t w miejsce const char* no to powodzenia :) Jeśli nadal jest coś nie tak Twoim zdaniem, zapraszam na priv, bo tutaj śmietnik zrobimy tylko. Pozdr
Strony:
1 2