|
|
Reality is almost always wrong. - House
|
|
|
de mért akarnál vele olyat elöállitani? 
gcc rulez nemkell nekünk msvc. csak az ide 
én ugycsinálom mint a parasztok:
LoadIcon(..., "alma.ico"  ;
|
|
|
Lehet Dev c++ al MSVC kompatibilis lib-eket előállítani? És ha igen akkor hogyan?
Szerk: Már nem érdekes, találtam más megoldást.
Ezt a hozzászólást TheProGamer módosította (2008.02.03 10:45 GMT+1 óra, ---)
Reality is almost always wrong. - House
|
|
|
Nálam úgy van ez a ikon dolog, hogy van egy erőforrásfájl a projecthez, pl. progi.rc, abban:
Kód: ID_IKON ICON ikon.ico
(Értelemszerűen az ikon fájl az ikon.ico.  ) A main.cpp-ben pedig az ablakosztály regisztrációnál:
Kód: wincl.hIcon = LoadIcon (hThisInstance, "ID_IKON");
wincl.hIconSm = LoadIcon (hThisInstance, "ID_IKON");
Nem tudom erre gondoltál-e..
|
|
|
az ikon ott van az exe mellett?
|
|
|
Értelmeset én se tudok mondani, eddig nekem is működött a dolog...
|
|
|
Nekem ez műxeni szokott (még amikor dev-cpp-t használtam), szal fogalmam sincs
|
|
|
Nem tudja valaki, hogyha project options-nál megváltoztatom az ikont, akkor a lefordított exe-nek miért egy ablak az ikonja?
|
|
|
Köszi!
Megy rendesen.....
|
|
|
Idézet gaborlabor :
A véletlenszám-generálásnak mi köze a fejlesztőkörnyezethez? 
Én C-ben így szoktam:
Kód: #include <time.h>
...
int random;
srand(time(NULL));
random = rand() % 10;
Így a random értéke 0..9 lesz. (Kivéve ha elrontottam vmit a kódban, mert fejből írtam).
ez a legegyszerűbb..
|
|
|
Én meg azt nem értem, miért emelte ki, hogy " DevCPP-ben". 
Szvsz inkább a prog.nyelvtől függ, nem a fejlesztőkörnyezettől.
|
|
|
Tudom h ezért inicializáljuk az idővel 
Csak nem tudtam h mit kérdez
|
|
|
Onnonnonno 
Azért van ott a
Kód: srand(time(NULL));

Merthogy ez pontosan azt a bizonyos kezdőszámot változtatja meg, az egyetlen olyan dolog függvényében, ami a számítógépeknél is tényleg mindig más: a rendszeridő. 
Szerintem olyannyira kicsi az esélye, hogy ugyanabban az időpillanatban generálsz véletlenszámot, hogy ettől az esettől el is tekinthetünk. 
Persze véletlenül sem akarlak kioktatni
|
|
|
Ha azt kérdezed hogy hogyan kell véletlenszámokat generálni nos pl. elindulsz egy számból aztán megszorzod valamivel, hozzáadsz valamit és veszed az osztási maradékát valamivel. Aztán ezt megint megszorzod vmivel stb. és igy kapsz egy pseudo random sorozatot (álvéletlenszámok).
Nyilván a determinisztikusság miatt ugyanabból a kezdőszámból ugyanazt a sorozatot kapod tehát ugyanabban az időpontban a rand() is ugyanazt a sorozatot fogja adni 
Van valami lineáris kongruencia módszer amit még nem tanultam csak hallottam rola
->
|
|
|
A véletlenszám-generálásnak mi köze a fejlesztőkörnyezethez? 
Én C-ben így szoktam:
Kód: #include <time.h>
...
int random;
srand(time(NULL));
random = rand() % 10;
Így a random értéke 0..9 lesz. (Kivéve ha elrontottam vmit a kódban, mert fejből írtam).
|
|
|
Ti DevCPP-ben hogyan oldottátok meg a véletlenszám generálást?
|
|
|
Sziasztok!
Egy kérdésem lenne:
ha a saját progiba szeretnék egy olyan feature-t beépíteni, hogyha meghal SIGSEGV-el, akkor nyomjon egy backtrace-t. Ehhez mit kellene tenni. (nem szeretnék egy GDB-t futtatni és csak a trace-ra vagyok kivancsi)
Azon túl vagyok, hogy a signal-t elkapom. azt is megnéztem, hogy a mingw-gcc teljesen kihagyja a backtrace támogatást. Linuxon még láttam valahol, de a win-es verzióban nem találtam semmi hasonlót.
Előre is kösz.
Lexx
|
|
|
Amikor átadtad a függvénynek az objektumodat, akkor azt a C++ úgy adta át, hogy szépen "lemásolta" az objektumot, a függvény ezen dolgozott, majd a visszatérés után minden maradt a régiben, mert ugye a másolat kitörlődött, az eredetin meg nem változtatott senki.
A következő kód ennek egy egyszerűbb esetét szemlélteti:
Kód: void novel(int i) {
i++;
}
void novel2(int* i) {
(*i)++;
}
int main() {
int i=5;
novel(i);
cout<<i<<endl;
novel2(i);
cout<<i<<endl;
return 0;
}
Egyébként ez egy elég nehéz téma, de van róla 1 cikk itt a JF-hun, szerintem olvasd el, hogy jobban megértsd: http://x100.dataglobe.hu/jatekfejlesztes/page.php?id=72
|
|
|
Ezt tapasztaltam, a stringek is jók lettek egyből  De az én fajtámban honnan vette azokat a számokat?
|
|
|
Beast válaszához még annyit tennék hozzá (csak hogy megkavarjalak még egy kicsit  ), hogy igenis, a C++-ban a stringet lehet másolni = operátorral, csakhogy ez nem a "Windowsos" stringre (LPCTSRT) vonatkozik, hanem a C++ standard lib string típusára (std::string).
|
|
|
Kösszi így jó
|
|
|
A megoldás, hogy mutatóként adod át az objektumot:
Kód: void obj_create(LPCTSTR nev, LPCTSTR type, int x,int y,int m,int xdir,int ydir, SP sp_nev, obj* objektum)
{
objektum->obj_x=x;
objektum->obj_y=y;
objektum->obj_m=m;
objektum->obj_x_dir=xdir;
objektum->obj_y_dir=ydir;
objektum->obj_type=type;
objektum->obj_neve=nev;
objektum->obj_sp_neve=sp_nev;
}
C++-ban a stringet nem birod átadni = operátorra, sprintf-fel másold bele.
|
|
|
Hi!
Van egy struktúrám, és egy függvény ami feltölti azt adatokkal, de valami mégsem működik  .
A struktúra így néz ki:
struct obj
{
int obj_x;
int obj_y;
int obj_m;
int obj_x_dir;
int obj_y_dir;
LPCTSTR obj_type;
LPCTSTR obj_neve;
SP obj_sp_neve;
};
Ezt szeretném feltölteni a ezzel a függvénnyel:
void obj_create(LPCTSTR nev, LPCTSTR type, int x,int y,int m,int xdir,int ydir, SP sp_nev, obj objektum)
{
objektum.obj_x=x;
objektum.obj_y=y;
objektum.obj_m=m;
objektum.obj_x_dir=xdir;
objektum.obj_y_dir=ydir;
objektum.obj_type=type;
objektum.obj_neve=nev;
objektum.obj_sp_neve=sp_nev;
}
úgy, hogy elsőnek létrehozok egy obj típusú változót és a függvénnyel feltöltöm:
obj box;
obj_create("doboz","item",0,0,10,0,0,sp_box,box);
A program le is fordul, de ha kiíratom az értékeit, pl. a box.obj_x 0 helyett egy 40 millió körüli szám lessz. Ha ezután egyenként megadom az értékeket hogy box.obj_x = 0, akkor jó lessz.
Mi a nem jó?
|
|
|
Keresel 1 példaprogit / nyíltforrású progit amiben benne van (gyk mindben...), és berakod pl. konstruktorba. Ez 1.
A WndProc 1 kicsivel érdekesebb, mert ugye függvénypointernek csak statikus függvényt lehet megadni. Ez is áthidalható, ha "engine" osztályt akarsz, akkor valószínűleg abból csak 1 példányod lesz, ezért csinálhatsz belőle singletont. (Vagy veheted még az egészet statikusra, de akkor meg minek az osztály  )
|
|
|
Könnyen 
Egy könyvel még könnyebben=D
|
|
|
Hello
Az lenne a kérdésem, hogy hogy lehetne (Dev) C++ban egy olyan Engine osztályt csinálni, aminek egy függvénye elvégzi a windowsos RegisterClassEx-es dolgokat és az ablak létrehozását, ill van egy üzenetkezelő függvénye is (a WndProc majd ezzel dolgoztatná fel az üzeneteket)? Van egy könyvem ami egy ilyet mutat, csak nincs meg hozzá a forráskód, ezért nem tudtam egyberakni a részeit, hogy működjön is...
|
|
|
Minden LIB be van állítva?
"lglu32 -lglaux" - minek, ha DDraw-ban fogsz dolgozni?
|
|
|
Beimportáltad a példaprogit mi???
Tessék szépen bepötyögni a kódot ... 
Amúgy szerintem a DirectDrawot nyugodtan kihagyhatod,olvasd inkább ugyanitt a segédletek között a Direct3D-re alapozó Monster3d tutorokat szépen sorban....aztán jöhet a DirectDraw...nekem így nagyon bejött
A problémádra a megoldás az,hogy ne importáld be a forrás írd be inkább,mert a visual c import kicsikét még bugos a DevCpp-ben.
|
|
|
hali.
Most kezdtem használni a Dev-c++ t. A 4.9.9.2 es verzió van fenn.
Egy itteni cikk sorozattal kezdtem: (C++) DirectX programozás 2. - DirectDraw inicializálása, használata.
Az a gond, hogy kell egy LPDIRECTDRAW7 tipusú változó.
Fordítás után hibát eredményez.:
A fordító kimenete:
Fordító: Default compiler
Building Makefile: "D:\prog\Makefile.win"
make... indítása.
make.exe -f "D:\prog\Makefile.win" all
g++.exe -c main.cpp -o ../Programok/Dev-Cpp/lib/main.o -I"D:/Programok/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"D:/Programok/Dev-Cpp/include/c++/3.4.2/backward" -I"D:/Programok/Dev-Cpp/include/c++/3.4.2/mingw32" -I"D:/Programok/Dev-Cpp/include/c++/3.4.2" -I"D:/Programok/Dev-Cpp/include" -fvtable-thunks
cc1plus.exe: warning: switch "-fvtable-thunks" is no longer supported
main.cpp:5: error: `LPDIRECTDRAW7' does not name a type
main.cpp: In function `bool InitDirect(HWND__*, int, int, int)':
main.cpp:112: error: `lpDD' undeclared (first use this function)
main.cpp:112: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:113: error: `IID_IDirectDraw7' undeclared (first use this function)
main.cpp:113: error: `DirectDrawCreateEx' undeclared (first use this function)
make.exe: *** [../Programok/Dev-Cpp/lib/main.o] Error 1
Feladat befejezve
------------------------------------------------------------------------------------
A fordító üzenetei:
[Warning] switch "-fvtable-thunks" is no longer supported
5 D:\prog\main.cpp `LPDIRECTDRAW7' does not name a type
---------------------------------------------------------------------------------------
A project beállítások --> Paraméter:
Fordító:
fvtable -thunks
-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -D_MBCS
Linker:
ngl32 -lglu32 -lglaux -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32
-lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -libddraw.a -libdxguid.a
Hát ennyi, gondolom ti rögtön tudtok rá megoldást.
|
|
|
Ok. Mostmár tényleg kezdek mérges lenni. Gondoltam egyet, és feltettem az SDL_Image 1.2.4-es notiff változatának devpak-ját. Mostmár lett egy "libSDL_image.a". Le is fordult, de az utolsó pillanatban egy ilyen hibaszöveg fogadott:
"The procedure entry point SDL_Error could not be located in the dynamic library SDL.dll."
  
Hozzáteszem: ha SDL_image header és library nélkül fordítok, probléma nélkül fut a program.
...jó. Tovább mentem. Be linkelem, header ok. Csak akkor szól be, ha használni akarom az "IMG_Load" függvényt.
...még tovább mentem. A probléma az volt, hogy egy régebbi SDL.dll volt a könyvtárban. Miután töröltem, működő képes lett a dolog
Köszönöm a segítséget! Asszem legközelebb jobban odafigyelek, és nem kérdezgetek...
Ezt a hozzászólást gopher módosította (2006.10.07 06:12 GMT+1 óra, ---)
|
|
|
No. Sikeresen felinstalláltam a library-t, és jól emlékszel a megadott dolgok kellenek hozzá, ezek is megvannak. Mint kiderült, a linkernek teljes útvonalat kell megadni, mert a devpak nem "libSDL_image.a"-t készit, hanem szimplán "SDL_image.a"-t. Ha csak simán "-lSDL_image"-t adok a linkernek, akkor "can not find .... " hibaüzifel elszáll.
Ez mostmár ok, de ezzel nem oldódott meg teljesen a problémám, mert most azt írja ki, hogy "undefined reference to IMG_Load"
A linker beállításai:
Linker=-lmingw32 -lSDLmain -lSDL -lSDL_ttf_@@_C:/Dev-Cpp/lib/SDL_image.a_@@_
Az includjaim:
#include "SDL/SDL.h"
#include "SDL/SDL_ttf.h"
#include "SDL/SDL_image.h"
...és minden dll a program könyvtárában van, ami kellhet...
|
|
|
"(egy devel-es VC-s library)"
????
"lib*.a legyen belöle"
?devpak alapból tartalmazza a static librarykat nem?
Konkrétan nem értem a problémád,de nekem megvan ez a library ha kell. ha jól emlékszem kell hozzá SDL,libtiff,libjpeg,libpng....ha jól emlékszem
|
|
|
Háj evribádi!
Szóval. Az volna a problémám, hogy PNG-ket szeretnék betölteni SDL_image-gel Dev-CPP alatt, de nem megy. Van egy tutorial-om mi szerint csak letöltöm a megadott fájlt (egy devel-es VC-s library), és belinkelem. De nem... Próbálkoztam már mindenhogy, szereztem még devpak-okat is, de nem segítettek. Megpróbáltam lefordítani az SDL_image könyvtárat is hogy lib*.a legyen belöle, de ahhoz, hogy ilyet csináljak, űgy tűnik még hülye vagyok.
Valaki használt már Dev-CPP alatt SDL_image-t?
|
|
|
OK , akor marad a pointeres megoldás...
Referencia azért kell, mert ez kezeli le a First(BMP) és a Second(BMP) feltöltését is, és így a Local referenciának mindíg arra kell mutatnia, amivel épp dolgozik, különben elég bonyolult lenne későbbiekben átadni az értékét tárolásra.
Köszi a gyors választ, akkor megyek pointerezni...
------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])
|
|
|
A switch után a {} jelek között lévő kód egy érvényességi körnek számít attól függetlenül, hogy hány case ágad van, tehát a kódban a LocalBmpReference-t többször deklarálod. Ráadásul ez a deklaráció nem látszik már az fread-nél mivel a deklarált változód megszűnik a switch végén.
TBMPStructure* LocalBMPPtr;
switch (ContainerNumber) {
case 1: LocalBMPPtr = &FirstBMP; break;
case 2: LocalBMPPtr = &SecondBMP; break;
}
TBMPStructure& LocalBMPReference = *LocalBMPPtr;
Ez a kód működni fog, de ha LocalBMPPtr által mutatott értékét változtatod akkor a referencia értéke is változni fog. Ennél talán elegánsabb megoldás ha csak a LocalBMPPtr pointert használod és . helyett -> műveletet használsz a tagok elérésére.
|
|
|
1ik probléma megoldódik, és már jön is a másik... Most ezzel szaraxik:
switch (ContainerNumber) {
case 1: TBMPStructure& LocalBMPReference = FirstBMP; break;
case 2: TBMPStructure& LocalBMPReference = SecondBMP; break;
}
fread(&LocalBMPReference.BMPHead.FileHeader.bfType, sizeof(LocalBMPReference.BMPHead.FileHeader.bfType), 1, p_File);
cout << hex << LocalBMPReference.BMPHead.FileHeader.bfType << endl;
És az a poén, hogy a switch-re azt írja, hogy túl soxor deklarálom a változót (pedig csak az 1ik ág futhat le, ott a break is...), aztán utána amikor hivatkozok rá (fread-nél), akkor azt írja, hogy nincs deklarálva
Na erre varjon vki gombot, vagy inkább dobjon vmi 5letet, miért csinálhatja
------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])
|
|
|
mind1, megoldottam így:
TBMPHead BMPHead;
FILE* p_File;
p_File = fopen("proba1.bmp", "rb" ;
if(!p_File)
{
cout << A file nem létezik! << endl;
} else {
fread(&BMPHead.FileHeader.bfType, sizeof(BMPHead.FileHeader.bfType), 1, p_File);
cout << hex << BMPHead.FileHeader.bfType << endl;
}(Módosította ShAdeVampirE 2005.10.16. 01:09-kor)
|
|
|
fin nem befolyásol, az csak a változó neve.
a másik megoldás pedig jó lenne, csak nekem először az első 2 byte-ot kéne ellenőriznem, hogy az 0x4D42 -e, mert ha nem, akkor nem szabályos BMP. De tesztelgetések közben mintha azt venném észre, hogy nem nyitja meg a file-t. Szal ha teljesen fals file-nevet adok meg, akkor is a változó értéke ugyan annyi lesz (bfType értéke), szal már tényleg nem értem az egészet...
------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])
|
|
|
nemtom, hogy hogyvan ez, vagy befolyásolja e, de én fin-t használok és nem f_in -t
Üdv: --==[B@z]==--
|
|
|
Idézet ShAdeVampirE írta:
Egy újabb hiba, ez a source:
ifstream f_in;
TBMPHead BMPHead;
f_in.open(
Nem vagyok valami nagy ész bináris fájlkezelés terén de sztem ahogy te akarod úgy nem megy. Én így csinálnám az else ágat:
else {
f_in.read( (char *)BMPHead, sizeof(BMPHead));
BMPHead.FileHeader.bfType; //így már elvileg lehet hivatkozni ezzel a megoldással
}
[url=http://theprogamer.uw.hu/ > http://theprogamer.uw.hu/ [/url] Updated:2004.10.11
|
|
|
Egy újabb hiba, ez a source:
ifstream f_in;
TBMPHead BMPHead;
f_in.open("proba1.bmp", ios::binary);
if ( f_in.fail() ) {
cout << "Ez a file nem létezik!" << endl;
} else {
f_in.read( (char *)BMPHead.FileHeader.bfType, 2);
}
f_in.close();
És ha kikommentezem az else ágat, akkor minden jól fut, ha viszont nem, akkor lefordul, majd futásnál vmi hibát okoz. De vajon miért?(Módosította ShAdeVampirE 2005.10.15. 18:13-kor)
|
|
|
(Módosította ShAdeVampirE 2005.10.15. 18:07-kor)
|
|
|
ThX, tényleg ez volt a hiba, már megint elfelejtettem...
------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])
|
|
|
A promléma szerintem a következő: a globális változóid nyilván egy olyan header-ben vannak, amit több helyre is includeolsz. Linkeléskor aztán jön a baj, mert két (vagy több) tárgykódban (object, .o) ugyanolyan nevű globális változók vannak.
A megoldás: extern.
Tehát az egyik fileban definiáld rendes globális változóként őket, adj nekik kezdőértéket, ha tetszik. A többiben pedig a változó típusa elé tedd az extern kulcsszót. Ezzel jelezheted a fordítónak, hogy ezeket a váltzókat fogada el érvényes névnek, de ne foglaljon nekik memóriát, mert egy másik tárgykódban már definiáltad őket.
Itt egy példa (és még synatx highlighting is van rajta! )
/*main.cpp*/
#include <iostream>
using namespace std;
void f();
int a_global=3;
int main() {
cout<<"a_global="<<a_global<<endl;
f();
return 0;
}
/*sub.cpp*/
#include <iostream>
using namespace std;
extern int a_global;
void f() {
cout<<"a_global="<<a_global<<endl;
}/>(Módosította WToma 2005.10.08. 18:13-kor)
|
|
|
Ja és ugyan ezt kapom a másik 2 globális változómhoz is, csak ott máshova mutat a hibajelzés (ott is olyan helyre, aminek köze sincs a változókhoz... )
------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])
|
|
|
Baz: Ja igen, a !i ebben az esetben i==0 -t jelent, ezt elfelejtettem irni, bocsi.
WToma pontosan leirta a dolgokat. En pedig ezeken felul azt mondtam, hogy:
Minden parancsot ; zar le.
(kiveve elofordito szamara pl. #define, include, ...)
Szoval tovabbra sem vilagos, hogy mi az amit TE MEGMONDTAL?!?
Mert Te azt allitod, hogy nem minden utasitast ; zar le, peldaul az if -et.
Erre irok peldat is, de tovabbra is az ellenkezojet allitod, es hogy megmondtad, es ettol most a hajamat tepem lassan, arghh... 
Szoval inkabb ejtsuk a temat, mert abszolute elbeszelunk egymas mellett...
HomeGnome(Módosította HomeGnome 2005.10.08. 13:21-kor)
|
|
|
igen, rájöttem, és ki is javítottam. Köszi
------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])
|
|
|
Azért, mert a new pont azt jelenti, hogy egy dinamikus változónak (pointernek) lefoglalja a memóriát, és meghívja a konstruktort.
Statikus változóra ugyan meg lehet hívni a konstruktort (ami meg is történik a létrehozásakor), de memóriát nem lehet neki foglalni, mert az már fordítási időben megtörtént.
Mellesleg szintaktikailag sem helyes, mert a new egy pointer típust ad eredményként, amit nem lehet egy nem-pointer változónak értékként adni konverzió nélkül.
Toma
"Ez nem bug, hanem feature!"
|
|
|
A new csak pointerrel működik, nem tudom miért, de így van, lehet hogy Stroustrup első axiómája!(Módosította gymisi 2005.10.08. 11:04-kor)
|
|
|
De miért csak pointerrel? (Úgy műúködik, csak akkor elég sok dolgot át kell írnom)
------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])
|
|
|
Legújabb project:
Szókirakó 3
Legutóbb frissített project:
Szókirakó 3
Friss kép a galériából:
|