Mentoss Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Z moim poprzednim problemem udało mi się już na szczęście poradzić, jednak moje szczęście nie trwało długo. 1.) class plr { public: bool jest; double sck; char* imie[]; }; int main() { int i; plr gracz[5]; for(i=0;i<5;i++) { gracz[i].jest=false; gracz[i].imie[0]="PLEJER"; }; i mam genialny efekt - gracze od 0 do 3 włącznie mają w nazwę ustawione domyślnie libgcj_s.dll. Ktoś wie dlaczego? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Skowron1993 Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 class plr { public: bool jest; double sck; char* imie; }; int main() { int i; plr gracz[5]; for(i=0;i<5;i++) { gracz[i].jest=false; gracz[i].imie="PLEJER"; }; Może tak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Zamiast operować na char*, użyj std::string Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Grudnia 2011 Autor Udostępnij Opublikowano 29 Grudnia 2011 @skowron: Tak było wcześniej to mi przy ustawianiu nazwy gracza wszystkie nazwy zmieniało. @ΨΧΞ writestring(); w kodzie 39dll-a potrzebuje char*. Chyba, że wiesz, jak to zamienić/ominąć? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 writestring(); w kodzie 39dll-a potrzebuje char*. Chyba, że wiesz, jak to zamienić/ominąć? string str="belbelele"; str.c_str(); http://www.cplusplus.com/reference/string/string/c_str/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Ale jeśli się nie myle c.str zwraca constans więc będziesz musiał dodać const_cast Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Grudnia 2011 Autor Udostępnij Opublikowano 29 Grudnia 2011 OOO! Zdaje się, że działa. DZIĘKI WSZYSTKIM! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Ale z czym problem bo nie rozumiem? Rzutowanie (char*) i tyle to normalne działanie. Jeśli jest z tym jakiś problem to można od razu pojechać z jakaś funkcja do wysyłania, które operuje na czystych bajtach writeBytes czy coś podobnego. To, że jest char a nie const char to wina twórcy dll bo powinno być const. Dodatkowo Mentoss w jakim środowisku pracujesz? Bo jak na moje oko to ten kod w ogóle nie powinien przejść przez proces kompilowania. Powinno wywalić coś z zero sized arrays. Oczywiście kod Skowrona też się nie skompiluje bo jest błędny, do jednego elementy tablicy o wielkość bajta nie można wpakować kilkunastu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Grudnia 2011 Autor Udostępnij Opublikowano 29 Grudnia 2011 Z Code::Blocks -a korzystam i oprócz warnów " warning: deprecated conversion from string constant to 'char*' " nie wywala nic. Przynajmniej teraz. Miałem jeszcze parę innych błędów, ale pogooglałem, popoprawiałem literówki i działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Z Code::Blocks -a korzystam i oprócz warnów " warning: deprecated conversion from string constant to 'char*' " nie wywala nic. Przynajmniej teraz. Miałem jeszcze parę innych błędów, ale pogooglałem, popoprawiałem literówki i działa. Przestań korzystać 0.0 Jeśli ten kod z pierwszego posta przechodzi to strach się bać co jeszcze ten CB nie łapie. btw Kod skowrona jest dobry, nie zauważyłem, że zmienił też deklaracje. mea culpa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Grudnia 2011 Autor Udostępnij Opublikowano 29 Grudnia 2011 Teraz mam na stringu. Btw. kod skowrona był wcześniej. Przepuszczało go, ale w dalszych operacjach były błędy. Teraz jest dobrze - działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Powinno wywalić coś z zero sized arrays. Coś ci się chyba pokręciło tam jest i<5 czyli tablica będzie od 0 do 4 czyli tak jak powinno no chyba że mówisz o czymś innym. Ale nie wiem nie jestem programistą :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Coś ci się chyba pokręciło tam jest i<5 czyli tablica będzie od 0 do 4 czyli tak jak powinno no chyba że mówisz o czymś innym. Ale nie wiem nie jestem programistą :P Pisałem o wewnętrznej tablicy ;) Chodziło o to: gracz.imie[0]="PLEJER"; Nie o samo odwołanie gracz tylko dalszą część. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Grudnia 2011 Autor Udostępnij Opublikowano 29 Grudnia 2011 a niby czemu to jest źle. Zmieniam wartości w tablicy, której pierwszy element mieści się w gracz.imie[0]. Wszystko jest ok. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 a niby czemu to jest źle. Zmieniam wartości w tablicy, której pierwszy element mieści się w gracz.imie[0]. Wszystko jest ok. A w, którym miejscu ustawiasz rozmiar tej tablicy? Można założyć, że kompilator CB wrzuci tam jedynkę jeśli tablica jest pusta ale to jest co najmniej dziwne. Nawet jeśli to powinien wypluć warning o tym informujący. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Grudnia 2011 Autor Udostępnij Opublikowano 29 Grudnia 2011 Może i wypluł. Nie wiem, nie pamiętam, może i nie czytałem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Też nie widzie w tym nic nadzwyczajnie dziwnego po prostu tablica której wielkość została automatycznie zadeklarowana od długości znaków nic w tym nowego ani nadzwyczajnego choć wiem że w visual c++ by to pewnie nie przeszło, dla mnie porypany kompilator/środowisko programistyczne/IDE ale każdy używa to co lubi :) o gustach się nie dyskutuje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 29 Grudnia 2011 Udostępnij Opublikowano 29 Grudnia 2011 Dobra: to: char* imie[]; jest różne od: char* (imie*)[]; Trzeba poczytać o zmiennych alokowanych na stosie i na stercie. Nie ma żadnej magicznej alokacji dla tablicy charów bo niczym się nie różni od innych tablic, dla samego ciągu znaków to już inna sprawa. Ja nie piszę o alokacji dla ciągu znaków tylko dla tablicy będącej własnością klasy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się