Keresés

Részletes keresés

Nils H Creative Commons License 2021.06.14 0 0 2083

Valszeg nálam valami fordítva rögzült. Én általában konkrét típusban gondolkodom, ami explicit.
De igen, van hogy nincs különösebb jelentősége, és van amikor tényleg kicsit rigorózusan önismétlő, mert már ordít jobbról, de viszont a nem triviálisaknál pont nem egy autoval akarnám megúszni, hogy mivel is van dolgom.

Előzmény: _szergej_ (2080)
Nils H Creative Commons License 2021.06.14 0 0 2082

?

Előzmény: Trebuh12 (2081)
Trebuh12 Creative Commons License 2021.06.09 0 0 2081

Co tu reklamujesz?

Előzmény: Nils H (2047)
_szergej_ Creative Commons License 2021.06.08 0 0 2080

Az autoval nagy hibat nem tudsz veteni, azzal biztos a megfelelo tipust kapod. Amugy szvsz (van amikor) hasznos:

- egyszerubb leirni, hogy pl auto it = vektorviktor.cbegin(), mint std::vector<ns1::ns2::ns3::cls::element>::const_iterator it = ...
- vagy auto lambda = []...
- vagy komplexebb visszateresi tipus eseten, pl. NS1::NS2::X::Enum NS1::NS2::X::getEnum() helyett auto NS1::NS2::X::getEnum() -> Enum, talan C++14-tol mar a -> se kell. Az viszont, hogy (egy headerben) egy osztaly deklaralhato igy: class X { public: auto doSomething(); };, szamomra kicsit bizarr: bele kell nezni az implementacioba, hogy mi a pontos visszateresi tipus?!
- ha atnevezel egy tipust, kisebb diffet eredmenyezhet

 

Nyilvan a hatranyai koze sorolhato, hogy ha egy meretesebb kodbazisban keresned, hogy melyik tipus hol van hasznalva, az nem egyszeru... Explicit is better than implicit - mondja a Zen of Python, de ez C++ :)

 

Ettol fuggetlenul ez a "szkriptnyelvesedes" nekem se tetszik tulzottan...

Előzmény: Nils H (2079)
Nils H Creative Commons License 2021.06.06 0 1 2079

Meg tudná nekem mondani valaki hogy a modern C++ -ban miért erőltetik az újraértelmezett auto  (típusdedukció) használatát? Nekem annyira szokatlan, hogy ne én írjam elő a típust, és úgy érzem előbb utóbb hibára vezet ez a 'lazaság'. Már próbáltam utána olvasni, de valahogy nem igazán tűntek meggyőzőnek az érvek. Még mindig annyira bizalmatlanul tekintek rá, ha meglátom a kódban, legszívesebben kigyomlálnám az összeset.

Pretoript Creative Commons License 2021.01.17 0 0 2078

Köszönöm a visszajelzéseket! Csináltam egyébként egy Discord csatornát is az oldalnak, ahol lehet beszélgetni, persze lehet, hogy tényleg jó ötlet lenne az oldalra is egy fórumrész.

 

Mindenképpen tervezem a videót, ahol bemutatom a letöltését, használatát valamelyik IDE-nek, csak az elején fontosnak tartottam, hogy bemutassam úgymond elemi eszközökkel a kód írást, illetve fordítást. Szintén tervezek egy olyan videót, ahol kitérek a lépésekre, hogy hogyan lesz futtatható fájl a forráskódból. Ezt majd parancssorban tervezem bemutatni a g++ kapcsolókkal, persze IDE-ben is lehet ezt kapcsolgatni, igyekszem minél előbb áttérni.

Fú, az ékezetekkel sokat bajlódtam, hogy jól jelenjen meg, erre az egyik videóban ki is térek, hogy milyen problémák adódhatnak, végül így sikerült megoldani nálam. Lehet, hogy majd erre is lesz jobb megoldás.

 

Köszi még egyszer, hogy megnéztétek és írtatok! :)

_szergej_ Creative Commons License 2021.01.16 0 0 2077

1-2 videodba belepillantottam, par eszrevetel/tanacs:

- en nem eroltetnem a CP1250-t, helyette inkabb UTF8-at (igaz, nem is hasznalok Wint)

- fentiekbol kifolyolag, mas is hasznalhat mas OS-t, ezert az #include <windows.h> is hanyagolhato, ha epp nem kell

- a notepad/NP++ + terminal kombo szerintem a sokadik video utan mar elrettento. Inkabb valamelyik IDE-t kene telepiteni/ismertetni minel elobb, ketsegtelen elonyei vannak a parancssorhoz kepest (ld. pl. 1 gombos forditas, kodkiegeszites, lint, forditasi hibak eseten a megfelelo sorra ugras, debugging stb...). MSVS Community Edition, Code::Blocks stb

 

Ha ezeket mar elvetetted, akkor bocs, nem neztem vegig az osszeset.

Előzmény: Pretoript (2075)
egy hazafi Creative Commons License 2021.01.16 0 0 2076

Szia!

 

Minden tiszteletem azoké, akik megosztják másokkal a tudásukat és segítenek megoldani kérdéseiket, problémáikat.

Az imént rápillantottam a honlapodra: egész jó, de lehetne rajta valami fórumféle vagy fájlmegosztó is példaprogramokkal.

A videóidat is mindenképpen megnézem.

Még egyszer, köszönet és erőt, egészséget, kitartást a munkásságodhoz!

Előzmény: Pretoript (2075)
Pretoript Creative Commons License 2021.01.16 0 0 2075

Sziasztok!

 

Egy ideje elkezdtem C++ oktató videókat csinálni a YouTube-ra. Az alapoktól indul és folyamatosan jönnek ki az új videók! :)

Ha van kedvetek nézzetek fel a csatornámra, vagy a honlapomra. Remélem segíthet valakinek.

Illetve örömmel várom a visszajelzéseket, ötleteket! :)

NevemTeve Creative Commons License 2020.10.01 0 0 2074

Egy akármilyen billentyűzet, amit programilag angolra állítasz, és megtanulsz vakon gépelni?

Előzmény: na da (2073)
na da Creative Commons License 2020.09.30 0 0 2073

nem 100 %-os megoldás.

Előzmény: XNC (2072)
XNC Creative Commons License 2020.09.30 -1 1 2072

Esetleg pl. 1 angol nyelvű billentyűzet??

Előzmény: na da (2071)
na da Creative Commons License 2020.09.30 0 0 2071

Sziasztok,

kicsit, de csak kicsit off kérdés: létezik olyan billentyűzet programozóknak normál áron (mondjuk 20 e alatt) amiken külön billentyű van {}[] <> ` ' jeleknek stb vagy csak én hiányolom?

Vannak a programozható billentyűzetek de elég magas áron, illetve amin csak öt programozható billentyű van, nem tudom elég-e, mik a tapasztalatok stb (a neonszínű gamerbillentyűktől kicsit idegenkedek).

DrDax Creative Commons License 2020.09.27 0 0 2070

Jól látod a helyzetet. Újfajta optimalizálás van néhány éve. A linker a függvények nem használt részeit kihagyja, miközben a függvény használatban van. Ez kisebb időzítési problémákat okoz. Sajnos arra lehetőség nincs, hogy egy meghatározott függvényre ne végezzen optimalizálást, ezért kell trükkhöz folyamodni.

Előzmény: NevemTeve (2069)
NevemTeve Creative Commons License 2020.09.27 0 0 2069

Hát igen, a kódpointerek nem kompatibilisek az adatpointerekkel, (sőt, C++ -ban az adatpointerek sem kompatibilisek a generikus adatadatterrel (void *)).

 

Illetve, mivel ez egy egzotikus platform, az sem biztos, hogy a kód- és adatpointerek azonos méretűek (ugyanannyi bitből állnak).

 

Ettől függetlenül nem kell 'struktúrába helyezni a függvenyt', hiszen nincs 'állapota': adott inputból előállítja az outputot.

 

Ebben a speciális esetben az lehetett az eredeti probléma, hogy a linker nem tette bele az outputba azokat a függvényeket, amikre nem volt hivatkozás. Valószínűleg a linker opciót kellene tanulmányozni, olyasmiket keresni, hogy 'whole-archive' vagy 'export-list'.

Előzmény: DrDax (2068)
DrDax Creative Commons License 2020.09.27 0 0 2068

Köszönöm a segítséget.

 

Nem írtam mert akkor még nem tudtam, hogy van jelentősége C++ a fordítóm, ami nem szereti a "bármilyen típusú" pointert.

Szintaktikailag így fogadta el a fordító:

 

(void (*)) PtrPlusOne (void (*p) (unsigned int)) { return (void (*)) (1+(char *)p); }

 

Ám mivel én struktúrába helyeztem a függvényt és ott nem lehet visszatérési értéke, egészen másképp kellett megoldanom.

 

(Eredetileg nem akartam ilyesmivel foglalkozni, de belekeveredtem egy Arduino rendszerhibába.)

Előzmény: NevemTeve (2067)
NevemTeve Creative Commons License 2020.09.26 0 0 2067

Annyi lenne, hogy egy pointerhez kell hozzáadni egyet? Mert akkor nincs szükség struktúrára, csak ennyi:

void *PtrPlusOne (void *p) { return (void *)(1+(char *)p); }

Előzmény: DrDax (2066)
DrDax Creative Commons License 2020.09.26 0 0 2066

Sziasztok!

 

Segítség kellene mert rendszerint összekavarodok a pointer típusokban, mint jelen esetben is. Van-e valakinek ötlete, hogyan kell szintaktikailag kijavítani az alábbi kódot?

A cél az, hogy a struktúrában látszó függvény visszatérési értéke a paraméterként megadott függvény címének eggyel növelt értéke legyen.

Az egésznek az értelmét igen hosszadalmas lenne elmagyarázni, ha lehet ne azt firtassuk.

 

A hibajelzés jelenleg: error: return type specification for constructor invalid

 

struct ForceFunctionToBeLinkedAndNotOptimized
{
  void* ForceFunctionToBeLinkedAndNotOptimized(void* p) { p++; return p; }
};

ForceFunctionToBeLinkedAndNotOptimized forceNotDoingSomething(egyakarmilyenfuggveny);

Nils H Creative Commons License 2020.09.03 0 0 2065

http://zolver.blogspot.com/2012/06/opengl-rendering-control-under-managed.html

 

Sajna itt nem működnek már a linkek.

Tud esetleg valaki helyette C++/CLI WinForm app-hoz OpenGL controlt/canvast/akármit, amire rajzolhatnák?

_szergej_ Creative Commons License 2020.08.07 0 0 2064

akkor ezt teljesen hagyjam el, és helyette az animáció befejezése után állítsam az urhajoletezik-et igaz-ra?

En ugy csinalnam (bar nem ismerem a teljes forraskodod/koncepciod, de ha az kell, hogy az animacio befejezesekor jelenjen csak meg az urhajo, akkor ugy logikus)

 

Azt hittem, az időzítők úgy számolnak vissza, hogy közben nem szüneteltetik a program futásának többi részét...

Ez (remelhetoleg/altalaban) igy is van.

 

Amugy itt egy lista, leirassal a WM_xx konstansokrol:

http://pinvoke.net/default.aspx/Constants.WM

Előzmény: egy hazafi (2063)
egy hazafi Creative Commons License 2020.08.07 0 0 2063

_szergej_:

 

Próbálkoztam korábban az SDL és az SFML beállításával, de sajnos nem sikerült. Egyelőre jó még nekem, amit alapban kínál a C::B meg a C++, úgyhogy esetleg a későbbiek során majd még újra próbálkozom, ha szükséges.
Az időzítőről nem egészen értem, amit írtál: akkor ezt teljesen hagyjam el, és helyette az animáció befejezése után állítsam az urhajoletezik-et igaz-ra?
Azt hittem, az időzítők úgy számolnak vissza, hogy közben nem szüneteltetik a program futásának többi részét...

 

NevemTeve: köszönet az oldalak ajánlásáért; megpróbálom kihámozni belőle a szükséges dolgokat.

NevemTeve Creative Commons License 2020.08.06 0 0 2062

Továbbá lett egy tipushibák rész, ami szerintem releváns.

Előzmény: NevemTeve (2061)
NevemTeve Creative Commons License 2020.08.06 0 0 2061

Namostan az animációkba nem szeretnék belemenni, mert nem értek hozzá; az ékezetes betűkkel viszont elég sokat foglalkoztam, abból ajánlom ezt a részt: C-programozás. A lényege: a C(C++) fordítónak tudnia kell, hogy a forrásprogram milyen kódolásban van (a te esetedben ez valószínűleg UTF-8 vagy windows-1250 lehet). Ezt az információt valamilyen parancssori opcióval adhatod meg a fordítónak, pl.: gcc, clang: -finput-charset; bcc: -CP

 

Előzmény: egy hazafi (2059)
_szergej_ Creative Commons License 2020.08.05 0 0 2060

En a helyedben a klasszikus WinAPI-t szvsz elfelejtenem. Erdemesebb lenne megismerkedned magasabb szintu frameworkokkel:

- ha mar ugy is C::B-ozol, akkor wxWidgets

- vagy Qt

- vagy SDL (kifejezetten jatekokhoz).

- stb

 

Ha a multiplatformitas nem is erdekel, mar annyival jobban jarsz, hogy nem kell pont ilyen WM_xxx-ekkel foglalkoznod, raadasul a topik temaja is C++ (nem C).
A masik problemadhoz: nyilvan az idozitessel van a gond, nem egy random 2mp-es async timerre kell visszaallitani az urhajoletezik-et, hanem akkor, amikor az animacio befejezodott, es utana hivni egy update-et az ablakra.

Előzmény: egy hazafi (2059)
egy hazafi Creative Commons License 2020.08.05 0 0 2059

Külön betűkészletet nem választottam a programomban. Azt hittem, az alapértelmezettként használtra is érvényes az ékezetes betűk kezelése...

Ami még az időzítést illeti: alternatív megoldást jelenthet az, ha elkezdek egy értékből visszaszámolni, és ha ez eléri a 0-t, akkor kezelni ezt úgy, mintha egy időzítő lejárt volna? Ha igen, melyik eseményben csináljam ezt; van valami ciklikusan frissülő esemény, ami megfelelne hozzá? Valami WM_... ?

Egyébként tudtok ajánlani olyan honlapot, ahol összefoglalva le vannak írva ezek a windows események, hogy mi mit csinál, mire jó? Mert én csak néhányat tudok, illetve csak néhánynak a felhasználására tudok következtetni a neve alapján, mint pl. a WM_CREATE a létrehozás eseménye az ablaknak, a WM_PAINT a rajzolás, a WM_DESTROY a megsemmisítés, a WM_KEYDOWN a gombnyomás... de nagyjából ennyiben ki is merül a tudásom.

Előzmény: NevemTeve (2058)
NevemTeve Creative Commons License 2020.08.05 0 0 2058

> Nálam csak kriksz-krakszokat ír ki ékezetes betűk helyett...

Esetleg sikerült valamilyen Symbol fontot kiválasztani? (A charmap nevű program segíthet tájékozódni.)

> Okozhatja ez a problémát az ékezetes betűkkel?

Nem, de ha a jobb egérgombbal ráklikkelsz, akkor lesz egy 'Settings' nevű dialógusablak, ahol további billentyűkiosztásokat telepíthetsz.

Az űrhajók kérdéséhez sajnos nem tudok hozzászólni.

Előzmény: egy hazafi (2057)
egy hazafi Creative Commons License 2020.08.05 0 0 2057

"Semmi különös, akár ANSI, akár Unicode módban simán megy."

Nálam csak kriksz-krakszokat ír ki ékezetes betűk helyett...

Egyébként a jobb alsó sarokban egy amerikai zászló van: ha jobb gombbal rákattintok, akkor ezen az "United States - English"-en kívül csak "United Kingdom - English"-re lehet állítani ezt a dolgot. Okozhatja ez a problémát az ékezetes betűkkel?

A másik kérdésem, hogy a kis játékprogramomban ha a játékos űrhajója ütközik egy aknával, azt akarom, hogy tűnjön el mindkettő, és az űrhajó egy kis idő múlva bukkanjon fel ismét (ha van még élete). Viszont most azt csinálja ilyen ütközés esetén, hogy az akna megmarad, űrhajó eltűnik, robbanás első képkockája megjelenik, aztán egy kis szünet, majd akna eltűnik, űrhajó megjelenik, robbanás animáció elindul. Így csinálom ezt a WM_PAINT-ban:

for (int i=0; i<aknak.size(); i++) {
if (urhajoletezik == true) {
if (jatekos.xhely < aknak[i].xh + bitmapkep.bmWidth &&
jatekos.xhely + 30 > aknak[i].xh &&
jatekos.yhely < aknak[i].yh + bitmapkep.bmHeight &&
15 + jatekos.yhely > aknak[i].yh) {
robbanasok.push_back(Robbanas(jatekos.xhely-7,jatekos.yhely-7));
robbanasok.push_back(Robbanas(jatekos.xhely+37,jatekos.yhely-7));
robbanasok.push_back(Robbanas(jatekos.xhely+15,jatekos.yhely+15));
robbanasok.push_back(Robbanas(jatekos.xhely-7,jatekos.yhely+22));
robbanasok.push_back(Robbanas(jatekos.xhely+37,jatekos.yhely+22));
urhajoletezik = false;
aknak.erase(aknak.begin()+i);
if (jatekoseletei > 0) {
jatekoseletei -= 1;
SetTimer(hwnd,jatekosvisszater,2000,NULL);
};
PlaySound(TEXT("utkozeshang.wav"), NULL, SND_FILENAME | SND_ASYNC);
};
};
aknak[i].kirajzol(Memhdc, kepkezelo, bitmapkep.bmWidth, bitmapkep.bmHeight, aknakkepe, aknakkepemaszk);
};

 

míg a WM_TIMER-ben:

 

switch (wParam)
{
 (...)
case jatekosvisszater: urhajoletezik = true;
break;
};

 

Tehát úgy látszik, ez az időzítős késleltetés okozhatja a galibát. De ha ez és így nem jó, akkor hogyan lehet másképpen megoldani C++-ban az időzítést? Ha pl. visszaszámolok egy értéktől kezdve 0-ig, mint időzítés, akkor azt melyik eseménybe tegyem?

Előzmény: NevemTeve (2056)
NevemTeve Creative Commons License 2020.07.12 0 0 2056

> hogyan lehet magyar ékezetes betűket kiíratni Win32 GUI programban?

 

Semmi különös, akár ANSI, akár Unicode módban simán megy.

 

> A setlocale(LC_ALL, "hun"); csak a konzolos programoknál működik?

 

Miért ne működne? Kell hozzá a "locale.h". Speciel az ékezetes karakterek kiírásához nem kell.

 

Előzmény: egy hazafi (2055)
egy hazafi Creative Commons License 2020.07.12 0 0 2055

Még egy időközben felmerült kérdés: hogyan lehet magyar ékezetes betűket kiíratni Win32 GUI programban? A setlocale(LC_ALL, "hun"); csak a konzolos programoknál működik? Csak mert nálam Code::Blocks-ban a Win32 GUI-s programom nem ismeri fel ezt az utasítást.

egy hazafi Creative Commons License 2020.05.24 0 0 2054

Sziasztok!

Régen voltam már itt, de megint elakadtam egy kis programommal. Úgy látszik, hogy az időzítő (timer) nem fut le benne, legalábbis mindig ugyanazt írja ki a képernyőre (CSELEKEDHET: IGAZ) ahelyett, hogy a beállított 5000 mp.-enkénti értékenként váltogatná az igaz-hamis között.

Code::Blocks-ban írtam Win32 GUI projektként.

Valaki látja benne, hogy mit rontottam el? Talán nem indul el az időzítő, vagy valami felülírja, vagy mi lehet a gond?

 

#if defined(UNICODE) && !defined(_UNICODE)
#define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif

#include <tchar.h>
#include <windows.h>

/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Make the class name into a global variable */
TCHAR szClassName[ ] = _T("CodeBlocksWindowsApp");

 

const unsigned int idozito1=1;
bool cselekedhet=true;

 

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow)
{
HWND hwnd; /* This is the handle for our window */
MSG messages; /* Here messages to the application are saved */
WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
wincl.style = CS_DBLCLKS; /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
/* Use Windows's default colour as the background of the window */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
return 0;

/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
_T("Code::Blocks Template Windows App"), /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);

/* Make the window visible on the screen */
ShowWindow (hwnd, nCmdShow);

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}

/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}


/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{


HDC grafikakezelo = GetDC(hwnd);

 

switch (message) /* handle the messages */
{
case WM_CREATE:
SetTimer(hwnd,idozito1,5000,NULL);
break;
case WM_TIMER:
 switch (wParam)
 {
  case idozito1: if (cselekedhet==true) {
  cselekedhet = false;
  }
  else {
  cselekedhet = true;
  };
  break;
 };
break;
case WM_PAINT:
if (cselekedhet==true) {
TextOut(grafikakezelo, 50, 10, "CSELEKEDHET: IGAZ", 17);
}
else {
TextOut(grafikakezelo, 50, 10, "CSELEKEDHET: HAMIS", 18);
};
break;
case WM_DESTROY:
KillTimer(hwnd,idozito1);
ReleaseDC(hwnd,grafikakezelo);
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!