#pracbaza #heheszki #programowanie #cpp

Fuk yis. Wczoraj jakieś haxxory zrobiły nam wjazd w kakaowe wrota a dzisiaj się okazało, że inwestycja w prehistoryczne technologie się opłaca. Nasz błyszczący nowością kompilator C++ z 97 roku nagle przestał działać (jakaś aktualizacja Windy), wyjebuje access violation na skompilowanej aplikacji to tu, to tam xD Nie działa na żadnym Win 10 już. Kolejny poziom długu technicznego został osiągnięty
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Khaine: moja pierwsza praca. Duża firma IT notowana na giełdzie. Kilka miesięcy po tym, jak przyszedłem - zwolnił się stary pracownik nazwijmy go Janek. Został po nim Komputer Janka z jedynym działającym środowiskiem deweloperskim na windowsie (normalnie kompilowaliśmy na linuksie, tylko kilku klientów chciało windowsową wersję). Komputer Janka miał zainstalowanego windowsa XP i visual studio 6, oraz przedpotopowe wersje bibliotek. Jak ktoś potrzebował przekompilować wersję pod windowsa - logował się
  • Odpowiedz
#programowanie #cpp
Ok, ja wiem, że to powinna być funckja statyczna i w ogóle... ale wykonał mi się taki potwór i zastanawiam się czy jego działanie jest zdefiniowane, czy lecę na farcie. Mam sobie klasę MainWindow (QMainWindow to rodzic, robię w #qt) i ma ona funkcję która działa tak:

void MainWindow::workerr() {
if (this != Q_NULLPTR) {
if (!this->close())
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#programowanie #cpp wyjaśnijcie debila into linkowanie w C++
1. dlaczego jak mam bibliotekę .dll to muszę zalinkować i .dll i .lib żeby z niej korzystać? Co jest w jednym a co w drugim?
2. dlaczego muszę jednocześnie includować pliki nagłówkowe i linkować binarki bibliotek?
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@onionomous:

1. dlaczego jak mam bibliotekę .dll to muszę zalinkować i .dll i .lib żeby z niej korzystać? Co jest w jednym a co w drugim?


Jak linkujesz statycznie czyli lib, to biblioteka jest wbudowywana w exeka programu. Jak linkujesz dynamicznie to bliblioteka nie siedzi w exeku tylko czytana jest z dllki. Po co w takim razie statyczna biblioteka podczas kompilacji? Tu już by trzeba było wniknąć w to jak
  • Odpowiedz
@onionomous:
Dlaczego potrzebjesz oprócz dll pliku lib? bo taki system sobie wymyślił M$, że system nie będzie miał dynamicznego linkera a w bibliotekach statycznych VC generuje sobie kod do linkowania z bibliotekami dll. BIlioteki dll da się używać bez plików lib, ale sam musisz sobie napisać kod który wczyta symbol z biblioteki dll. Pod linuxem gdzie linker jest w systemie nie potrzebujesz nic poza bibliotekami dynamicznymi .so
  • Odpowiedz
Robię sobie kursik #cpp z Zelentem i oczywiście coś się wyjebuje.
Mam kod: https://pastebin.com/YUQx87fW
I błędy w VS: https://pastebin.com/6VM5duzr
I nie wiem co mam doinstalować emacsem w sendmailu żeby ten chory kompilator nie darł mordy gdy taki cpp.sh wszystko łyka i ładnie wypluwa.

#naukaprogramowania
zortabla_rt - Robię sobie kursik #cpp z Zelentem i oczywiście coś się wyjebuje.
Mam ...

źródło: comment_7tQxxa2aMBe2mJV23ZD5fn3et1viuwEP.jpg

Pobierz
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@zortabla_rt: staraj sie include'owac wszystko czego uzywasz i nie polegaj na tym, ze jakis header jest includowany w innym headerze, ktorego przypadkiem uzywasz. Widocznie w gcc string jest includowany gdzies w iostream stad brak bledow na cpp.sh
  • Odpowiedz
@GaHee: spora, a najprościej będzie zacząć od prawej

tl;dr: w pierwszym zmienna będzie wskazywać na nowy obiekt (i błędnie!), w drugim zmienna będzie posiadać wartość nowej zmiennej

ClassName() -> jawnie wywołujesz bezparametrowy konstruktor (kompilator może taki wygenerować za Ciebie, jeżeli m.in. nie zdefiniowałeś żadnych konstruktorów)
= ClassName() -> przypisz do czegoś po lewej nowo utworzony obiekt. Tak naprawdę, ClassName() po wywołaniu konsturktora utworzy obiekt tymczasowy, który następnie zostanie wykorzystany do utworzenia/przypisania obiektu po
  • Odpowiedz
#cpp #cmake
Standardem teraz jest cmake czy są jakieś nowsze narzędzia do buildowania w cpp? W czym się testuje jednostkowo? Bo w cmake można uruchamiać testy ale są dosyć podstawowe.
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Jojne_Zimmerman: Catch jest bardzo spoko, coraz więcej projektów zaczyna go używać. Największym plusem jest łatwość użycia - include single-header i do boju :) Jeśli czas kompilacji jest problemem, to lepiej użyć jakiegoś google testa.
  • Odpowiedz
Czy może mi ktoś powiedzieć, czy jest jakiś sposób, aby zmusić ten sposób zapisu do tablicy do działania?

int **array;
int *writeElement(int idx) {return array[idx];}
void createArray(void) {array=new int*[20];}
int main()
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@simia: w przypadku metod kontenerów może mieć to sens, bo obiekt będzie istniał po wyjściu z funkcji (a nie zostanie sprzątnięty razem ze stosem wywołania). Ogólnie jest to dość śliski grunt i o ile można zaufać że w stlu takie operacje nie będą gubiły zwracanych obiektów, o tyle gdziekolwiek indziej już bym taki przekonany nie był.
  • Odpowiedz
Polujących na #mirkopromocje pewnie zainteresuje, co dziś w księgarniach możemy kupić 40% taniej w związku z promocjami "codziennie inny tytuł 40% taniej"
W księgarni #helion dziś książka, której autorami są Gene Kim, Kevin Behr i George Spafford Projekt Feniks. Powieść o IT, modelu DevOps i o tym, jak pomóc firmie w odniesieniu sukcesu za 29,40zł (ocena na lubimyczytać 7,38/10)
W księgarni Sensus dziś książka Nikodema Marszałka Energia Miłości. Duchowy podręcznik
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@TenAnonToKlopoty: ja używałem brzydkiego rozwiązania w postaci timera (SDL_AddTimer()) z ustawionym czasem np. 1/60 sekundy, który wywoływał event z rysowaniem grafiki poprzedzonym obliczeniami logiki i fizyki gry(ze stałym dt = 1/60 sekundy). to rozwiązanie wywala się, gdy gra jest bardziej skomplikowana i komputer docelowy nie uciągnie 60fps.
  • Odpowiedz
@MamCieNaHita: już rozwiązałem problem, używałem V-Synca więc timer był mi niepotrzebny
problemem w moim przypadku był taki, że w Windowsie jak się włączy grę w okienku to potrafi się zacinać przez to, że inne aplikacje czy nawet sam menadżer okien w Windowsie przeszkadza w graficznym aktualizowaniu klatek, opóźnia je czy coś
włączyłem grę na fullscreenie i problem zniknął :D
  • Odpowiedz
@wieczniezielony: trochę ma Twoja prowadząca rację odnośnie utrudniania. Kod ma być czytelny - nawet dla Ciebie po tygodniu może już coś być nieoczywiste.

switch sugeruje kilka przypadków dla określonych wartości liczbowych. Idealnie nadaje się dla enum-ów. Niespecjalnie sprawdza się w przypadku logicznym: puste-niepuste? Do tego powinieneś użyć zwykłego if-a.

Poza tym, w kodzie tworzysz wektor (albo wektor wektorów) i jawnie deklarujesz go jako pusty. Po co to sprawdzać
  • Odpowiedz
@that_ugly_dude: Dlatego dodaje dokumentacje, nawet do prostych algorytmow, oraz nie nazywam zmiennych x, y, z( ͡° ͜ʖ ͡°)

No tak zgadza sie i dokladnie tak robie, dostaje dane X jako pierwsze i przydzielam do zmiennych, reszta to dane Y i przydzielam do wektora czyli case nadaje sie idealnie. Dla if-a musialbym dodac kolejna zmienna ktora sprawdzalaby ktory raz pobieram dane z pliku.

Nie robilem nic z
  • Odpowiedz
Mam sobie klasę Transaction. Ma ona jako pole QDateTime. Mam też klasę Account, a w niej std::Vector. Czy idzie posortować taką listę po dacie? Na pic rel widać co za cudo sobie tworzę, ma to być program do zarządzania wydatkami, na razie robię wersję konsolową, z czasem dojdzie apka desktopowa, a jak się uda to i mobilna.
#cpp #programowanie #leinnanblends
Leinnan - Mam sobie klasę Transaction. Ma ona jako pole QDateTime. Mam też klasę Acco...

źródło: comment_b9HUaLw1xHyR7rlhReCtUZa0HZkylreH.jpg

Pobierz
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#programowanie #cpp
Mirki raczcie przypomnieć jak z tablicy char zrobić "explode" w języku C.
Się znaczy mam : "bla:laa:haa" chcę wyciągnąć poszczególne elementy rozdzielone znakiem ":".
Głupio latać po tym forami jeśli jest gotowe rozwiązanie.
Niestety ostatecznie kod będzie na mikrokontrolerze, więc bez szaleństw z bibliotekami...
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

  • 2
@defoxe napisaleś C wiec jest strtok, choć jeśli na jakimś uC, to nie musi być to najlepszy pomysł. Możesz wymusić protokół typu (len, str) i obejść problem całkowicie, jeśli to skądś dostajesz.
  • Odpowiedz
Próbuję wyeliminować problemy z optymalizacją od razu niż później z tym walczyć


@TenAnonToKlopoty: Właśnie najpierw powinieneś napisać działający kod a dopiero później brać się za optymalizację.
Może pokaż kod to ktoś będzie w stanie coś pomóc.
  • Odpowiedz
@simia: Sam nie wiem co tu zrobić jeszcze zostając przy tym SDL. Przesunięcie mam o 5 pikseli, bo jak dam o 1 to może i jest płynnie, ale wszystko jest bardzo wolne, co trochę mija się z celem.
  • Odpowiedz
Wątki można sobie wyobrazić jako oddzielne aplikacje, które czasem komunikują się ze sobą nawzajem ?

Jak każda aplikacja, wątek kiedyś musi się skończyć/przejść w fazę nasłuchiwania

#programowanie #cpp
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@TamamShud: Tylko w niektórych prostych systemach . W zaawansowanych programy maja wlasna przestrzen adresowa, a watki maja ze soba wspolna - to jest roznica.
@Wiktor426: mogą, ale nie muszą (jest to zalezne od systemu), a wątki po prostu mają
@leoha: w prostych systemach mogą działac dokładnie tak jak wątki - ale to nisza jest.
  • Odpowiedz
#programowanie #cpp
Czołem programiści 15k ( ͡° ͜ʖ ͡°)
Czy jest ktoś w stanie wyjaśnić mi, jak działa np. taka konstrukcja:
_void f(typ *&p, int n) {_
Innymi słowy, jak działa wskaźnik na referencję na zmienną, do czego można by to wykorzystać
i czemu po prostu nie typ wskaźnikowy? Znalazłem to gdzieś na stronie o strukturach danych i nie wiem czym to się wyróżnia,
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@j4ace: Różnica jest prosta - jeśli napiszesz tylko typ *p to w f dostaniesz lokalną kopię wskaźnika, co w zupełności wystarcza do dostania się do tego na co on wskazuje. Ale czasem musisz zmodyfikować, powiedzmy, że masz jakiś T* ptr wskazujący na null, wywołujesz funkcję void loadObject(T* &ptr), w tej funkcji tworzysz sobie jakiśtam obiekt t typu T i na koniec robisz ptr = &t. To jest horror programistyczny
  • Odpowiedz
@j4ace:

jak działa wskaźnik na referencję na zmienną

Niema czegoś takiego, nie będzie. Referencja to tylko syntactic sugar na wskaźnik i pozwala kompilatorowi bardziej uważać na typ odcinając się od języka
  • Odpowiedz