@MrOsamaful: Od dziś uczymy się kompilować z warningami i nie ignorujemy ich. Zapisz w zeszycie sto razy -Wall -Wextra.

C++ to nie ruby, return nie jest opcjonalne:

bool Plansza::hasMine(int x, int y) {
if(x >= 0 && x < N && y >= 0 &&
  • Odpowiedz
@MrOsamaful: wyszło właśnie to czego tak usilnie szukałem: undefined behaviour

w tym przypadku brak return powodował, że funkcja zwracała to, co akurat znajdowało się w rejestrze RAX Twojego procesora, ponieważ w C/C++ wartość zwracana zawsze umieszczana jest właśnie tam.

Spłukiwanie strumienia powodowało ustawienie RAX na wartość niezerową i stąd metoda hasMine zwracała true.

Tego typu błędu bez problemu unikniesz stosując -Wall i -Werror
  • Odpowiedz
Dzięki wszystkim za tematy, wstępnie przejrzałem. Znacie jakieś dobre źródła wiedzy właśnie z dziedziny "bezpieczeństwo technologii informatycznych + programowanie + sieci"? Jakieś sprawdzone strony, książki, fora? Gdzie znajdę np. jakieś koncepcje programistyczne, diagramy itp. pokazujące choćby proces autoryzacji przy przelewach bankowych czy różnych innych operacji, które wymagają wysokiego poziomu zabezpieczeń. Oczywiście nie jakieś kursy czy coś w tym stylu, tylko bardziej artykuły.
  • Odpowiedz
@wolodia: Jasne zgoda. Prawde mowiac nie jest to tak rzadki przypadek jakby sie moglo wydawac. Zgadzam sie w pelni z "powinien byc wirtualny albo niepubliczny" nie zgadzam sie z "powinien byc wirtualny".
  • Odpowiedz
@GaHee: bo to nie ma prawa działać. grid rozkłada je po kolei, a pierwszy nie ma ustawionego rozmiaru. wywal wszystkie width wewnątrz layoutów, masz używać właściwości Layout: Layout.preferredWidth: parent.width / 2, wystarczy dla pierwszego tylko bo drugi wypchnie na bok.
no i wewnątrz layoutu nie możesz używać anchor, bo layout sam tym zarządza.
kalectwo - @GaHee: bo to nie ma prawa działać. grid rozkłada je po kolei, a pierwszy ...

źródło: comment_QKlgHB5g76Wy6EXLfVPOsZsQfji8lQFB.jpg

Pobierz
  • Odpowiedz
@GaHee: Ustawianie Layoutów jest trudne ale jeszcze gorsze jest wkładanie jednych w drugie.
Generalnie jak wystarczy ci Grid/Row/Column to korzystaj z nich potem dopiero z layoutów.
A właściwie sporo da się zrobić na samych anchorach, jest sporo klikania i nie jest odporne na zmiany ale często działa najlepiej.
  • Odpowiedz
Od siebie polecam jeszcze "Zaprzyjaznij sie z algorymami" Jacka Tomasiewicza. Dosc nowa, niedawno wyszla. Raczej dla osob ktore niezbyt duzo wiedza o algorytmice
  • Odpowiedz
@Spojler22: kawałek zdekompilowanego do C kodu jakiejś większej aplikacji. Nie jest zbytnio bardziej czytelne od assemblera. To co widzimy na ekranie liczy "coś". Może jakiś hash, może manipuluje obraz, ciężko powiedzieć. Mnie rozbawiło, że bohater widział tam facebooka, linked-ina, chany i jeszcze firewalla. No ale ja spaczony jestem, więc nie oczekuję zrozumienia.
  • Odpowiedz
Czołem Mirki,
Poszukuję jakiegoś dobrego materiału do nauki (a raczej odświeżenia sobie wiedzy) odnośnie #cpp
Najlepiej gdyby to był jakiś kurs wideo (może być w języku angielskim).
W weekend zabrałem się za książkę "Programming: Principles and Practice Using C++" Stroustrup'a ale trochę "ciężka" jak dla mnie.
#naukaprogramowania
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Stroustrup jest FATALNYM wyborem jeśli chodzi o naukę programowania... Ciężko się czyta....a jeszcze ciężej z tego uczy... On jest genijalnym inżynierem, ale słabym autorem książek...
  • Odpowiedz
Szukam i szukam i odpowiedzi nie mogę znaleźć. Zabrałem się dzisiaj za qt quick i już na starcie pojawił się problem. Ustawiłem sobie ContextProperty na swój "viewModel", gdzie mam QList. Pakuje do niej powiedźmy obiekty klasy Person, jak zbindować tą listę z ComboBoxem, żeby wyświetlaną wartością było pole Name. Z góry dziękuje.
#cpp #qt #qt5 #qml #naukaprogramowania
  • 18
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@lionbest: Pamiętaj że w klasie którą wrzucasz do listy musisz mieć to property w pełnie zadeklarowane:

Q_PROPERTY(QString myProperty READ myProperty WRITE setMyProperty NOTIFY myPropertyChanged)
Chyba że ta wartość zawsze będzie stała (od powstawia obiektu) i deklarowanie sygnału NOTIFY jest bezensu wtedy deklarujesz tak:

Q_PROPERTY(QString myProperty READ myProperty CONSTANT )
Inaczej QML się burzy że nie ma sygnału NOTIFY.
  • Odpowiedz
#naukaprogramowania #cpp Czy znacie może jakiś prosty silnik graficzny c++ do tworzenia prostych gier?? coś lepszego niż "borland builder" :) a mniej skomplikowanego niż unreal engine. W zasadzie uczę się sam dla siebie cpp i chciałbym sobie porobić jakieś malutkie "projekty badawcze" :)

szukam w internetach informacji ale jak coś znajdę to piszą np: "Przestarzały, brak wsparcia... nie polecam".
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

SDL jest do C a nie C++,


@lionbest: zgadza się, jest do C, ale jest napisany tak że działa w 100% z cpp również, jakbyś niewiedział to cpp to rozszerzenie języka C, odpowiednio napisane aplikacje w C bez żadnych zmian komiplują się na cpp @destabilizacja:
  • Odpowiedz
#cpp #programowanie

Mam problem z przeładowaniem operatora ! (operator overload). Zdaję sobie sprawę, że mój przykład zaburza semantykę języka i można to zrobić bardziej czytelnie, ale jako że uczę się c++ to próbuję różnych rzeczy. Otóż mam klasę Card
która opisuje kartę do gry. Na samym dole zaimplementowany jest operator !.
Tutaj pojawiają się pytania, otóż
1. Dlaczego tam występuje const (zakładam, że gwarantuje on że parametr podany przez referencje
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@sokytsinolop:
1. const umożliwia wywołanie metody( tutaj przeładowanego operatora) na obiekcie zadeklarowanym jako const, this będzie wtedy typu const Card*.
2. !this zawsze powinno zwrócić true (wskaźnik nigdy nie będzie nullptr) chyba że robisz jakieś UB. A jeżeli chcesz wywołać przeładowany operator w klasie to wywołaj go na referencji czyli !*this.
Dodatkowo nie powiano się robić takich metod jak print wewnątrz klasy, które używają czegoś poza klasy.
Kolejna
  • Odpowiedz
@-PPP-: Nie oto chodzi. Generalnie jak f = tablica+1; to f[-1] będzie ok, problem jest gdy wychodzimy poza zakres zadeklarowanej zmiennej tablicowej. Kompilator optymalizując taki kod może przyjąć że to się nigdy nie wydarzy.
  • Odpowiedz
Mirko co robię źle? http://pastebin.com/Umd7yTtT

Po podaniu liczb i otrzymaniu wyniku program się wywala (BLOCKTYPEISVALID(pHead -> nBlockUse)). Jak zakomentuje obydwa delete to program działa bez crashu ale za to przy łańcuchu znaków wywala się z błędem Run-Time Check Failure #2 - Stack around the variable 'd' was corrupted

#cpp
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#programowanie #cpp

Mam taki problem mireczki że próbuję żeby w stringu siedział łańcuch tekstowy ze spacją. Cin tego nie umożliwia. Próbowałem getline(cin, zmienna) ale tak jakby po tym od razu naciskał mi się enter bez jakiejkolwiek możliwości wpisanie danych z klawiatury. Ma to być program liczący samogłoski, spółgłoski, liczby i inne znaki w tekście podanym z klawiatury. Pseudo program konsolowy. Kod programu to tutaj

Jakby co to klikajcie
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach