Witam, mam taki problem - pisze sobie takie proste GUI i zauwazylem pewna rzecz, ktora nie wiem jak obejsc mianowicie program wywala mi sie, gdy probuje używać funkcji gtk zwracającej typ std::string - na przyklad Glib::get_current_dir etc. Podobnie jest jak jakas funkcja potrzebuje jako argumentu std::string np otwierajaca obrazek to aplikacja sie wywala tj dostaje jakis tam violation i nic dalej nie idzie zrobic. Co ciekawe w przypadku gdy pisze do typu ustring takie problemu nie ma - teoretycznie wyglada to na jakis balagan z kodowaniem, ktore wystepuje tylko przy std::string, a nie ma tego przy ustring, jednak czesc potrzebnych mi gotowych funkcji gtk uzywa niestety std::string i nie wiem co z tym zrobic. dodam ze pisze w ms visual studio 2012. Czy spotkal sie ktos z was moze z taka sytuacja albo ma pomysl co z tym zrobic mozna?

- Rejestracja:ponad 21 lat
- Ostatnio:około 13 godzin
czy biblioteka gtk była skompilowana tą samą wersją kompilatora? jeśli nie, to być może używa innej definicji klasy std::string
niż twój program.
przekompiluj bibliotekę.
poszczególne wersje Visuala (2008, 2010, 2012...) mają zupełnie niezgodne ze sobą klasy z STL-a.
GCC też ma swoją implementację.
gtk instalowałem binarkę, nie wiem czym to było kompilowane, ale zauważyłem jeszcze jedną rzecz - mianowicie jak chcę otworzyć obrazek
std::string d = "1m.jpg";
Glib::RefPtr<Gdk::Pixbuf> image = Gdk::Pixbuf::create_from_file(d);
to w terminalu dostaję taki komunikat:
unhandled exception is signal handler:
domain: g-file-error-quark
code: 17
what : failed to open file '`p\u001f': Invalid Argument
Czyli wyglada jakby traktowal moj plik 1m.jpg jako p\u001f...

- Rejestracja:ponad 21 lat
- Ostatnio:około 13 godzin
Nie będzie ci string
działał na granicy program–gtk jeśli program jest kompilowany inną wersją Visuala niż GTK.
Jeśli nie możesz znaleźć wersji GTK skompilowanej konkretnie wersją 2012 (tylko tą i żadną inną) to zostaje ci samodzielne przekompilowanie GTK.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.