játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5441
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2519

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2186
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
TPG - Tag | 3402 hsz       Online status #80921   2008.02.03 14:48 GMT+1 óra  
Idézet
Asylum :
de mért akarnál vele olyat elöállitani?
gcc rulez nemkell nekünk msvc. csak az ide


A legfrissebb, beta2-es libtheora-t nem tudtam lefordítani MSVC-vel (végülis le tudtam volna csak nem mentem volna vele semmire) mert tele volt mingw kompatibilis módszerekkel beékelt assembly-vel. Szerencsére találtam házilag barkácsolt verziót amit MSVC kompatibilissé varázsolt az időmilliomos illető.
Reality is almost always wrong. - House

   
Asylum - Törzstag | 5441 hsz       Online status #80918   2008.02.03 14:38 GMT+1 óra  
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";
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
TPG - Tag | 3402 hsz       Online status #80885   2008.02.03 08:58 GMT+1 óra  
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

   
JohnnyCash - Tag | 10 hsz       Online status #60922   2007.06.23 22:42 GMT+1 óra  
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..

   
MaximumViolence - Törzstag | 1020 hsz       Online status #60861   2007.06.23 08:01 GMT+1 óra  
az ikon ott van az exe mellett?
Ez egy reszeg post...

   
WToma - Szerkesztő | 635 hsz       Online status #60860   2007.06.23 07:30 GMT+1 óra  
Értelmeset én se tudok mondani, eddig nekem is működött a dolog...
Ez nem bug, hanem feature!
http://sohivatal.uw.hu
   
gaborlabor - Moderátor | 4449 hsz       Online status #60713   2007.06.22 05:54 GMT+1 óra  
Nekem ez műxeni szokott (még amikor dev-cpp-t használtam), szal fogalmam sincs

   
Joga - Törzstag | 1791 hsz       Online status #60698   2007.06.22 03:45 GMT+1 óra  
Nem tudja valaki, hogyha project options-nál megváltoztatom az ikont, akkor a lefordított exe-nek miért egy ablak az ikonja?
(ಠ ›ಠ) Stewie!

   
Joga - Törzstag | 1791 hsz       Online status #58915   2007.06.08 22:24 GMT+1 óra  
Köszi!
Megy rendesen.....
(ಠ ›ಠ) Stewie!

   
MaximumViolence - Törzstag | 1020 hsz       Online status #58701   2007.06.07 12:56 GMT+1 óra  
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..
Ez egy reszeg post...

   
gaborlabor - Moderátor | 4449 hsz       Online status #58698   2007.06.07 12:38 GMT+1 óra  
É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.

   
Asylum - Törzstag | 5441 hsz       Online status #58695   2007.06.07 12:33 GMT+1 óra  
Tudom h ezért inicializáljuk az idővel
Csak nem tudtam h mit kérdez
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
gaborlabor - Moderátor | 4449 hsz       Online status #58694   2007.06.07 12:32 GMT+1 óra  
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

   
Asylum - Törzstag | 5441 hsz       Online status #58693   2007.06.07 12:14 GMT+1 óra  
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

->
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
gaborlabor - Moderátor | 4449 hsz       Online status #58664   2007.06.07 08:17 GMT+1 óra  
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).

   
Joga - Törzstag | 1791 hsz       Online status #58650   2007.06.07 06:48 GMT+1 óra  
Ti DevCPP-ben hogyan oldottátok meg a véletlenszám generálást?
(ಠ ›ಠ) Stewie!

   
Lexx - Tag | 117 hsz       Online status #56622   2007.05.25 01:11 GMT+1 óra  
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
   
WToma - Szerkesztő | 635 hsz       Online status #48093   2007.02.26 11:34 GMT+1 óra  
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
Ez nem bug, hanem feature!
http://sohivatal.uw.hu
   
gberes - Tag | 35 hsz       Online status #48048   2007.02.26 06:24 GMT+1 óra  
Ezt tapasztaltam, a stringek is jók lettek egyből De az én fajtámban honnan vette azokat a számokat?

   
WToma - Szerkesztő | 635 hsz       Online status #48019   2007.02.25 12:59 GMT+1 óra  
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).
Ez nem bug, hanem feature!
http://sohivatal.uw.hu
   
gberes - Tag | 35 hsz       Online status #48017   2007.02.25 12:50 GMT+1 óra  
Kösszi így jó

   
beast - Törzstag | 1241 hsz       Online status #47992   2007.02.25 10:24 GMT+1 óra  
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.

   
gberes - Tag | 35 hsz       Online status #47990   2007.02.25 09:46 GMT+1 óra  
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ó?

   
WToma - Szerkesztő | 635 hsz       Online status #47554   2007.02.18 10:55 GMT+1 óra  
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 )
Ez nem bug, hanem feature!
http://sohivatal.uw.hu
   
MaximumViolence - Törzstag | 1020 hsz       Online status #47509   2007.02.17 11:23 GMT+1 óra  
Könnyen
Egy könyvel még könnyebben=D
Ez egy reszeg post...

   
dvorgaz - Törzstag | 575 hsz       Online status #47508   2007.02.17 11:04 GMT+1 óra  
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...
   
Csaba42 - Törzstag | 946 hsz       Online status #43753   2007.01.04 12:26 GMT+1 óra  
Minden LIB be van állítva?

"lglu32 -lglaux" - minek, ha DDraw-ban fogsz dolgozni?

   
MaximumViolence - Törzstag | 1020 hsz       Online status #43731   2007.01.04 09:12 GMT+1 óra  
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.
Ez egy reszeg post...

   
tomi - Tag | 1 hsz       Online status #43506   2007.01.02 06:42 GMT+1 óra  
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.
   
gopher - Törzstag | 496 hsz       Online status #31838   2006.10.07 05:59 GMT+1 óra  
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, ---)
   
gopher - Törzstag | 496 hsz       Online status #31837   2006.10.07 05:39 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...
   
bloodknife - Törzstag | 469 hsz       Online status #31827   2006.10.06 23:45 GMT+1 óra  
"(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
   
gopher - Törzstag | 496 hsz       Online status #31804   2006.10.06 09:07 GMT+1 óra  
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?
   
ShAdeVampirE - Guests | hsz       Online status #5578   2005.10.16 22:01 GMT+1 óra  
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])

   
Eagle_Lor - Guests | hsz       Online status #5577   2005.10.16 15:16 GMT+1 óra  
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.


   
ShAdeVampirE - Guests | hsz       Online status #5576   2005.10.16 09:20 GMT+1 óra  
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])

   
ShAdeVampirE - Guests | hsz       Online status #5575   2005.10.15 17:09 GMT+1 óra  
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)

   
ShAdeVampirE - Guests | hsz       Online status #5574   2005.10.15 16:23 GMT+1 óra  
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])

   
Baz - Guests | hsz       Online status #5573   2005.10.15 12:31 GMT+1 óra  
nemtom, hogy hogyvan ez, vagy befolyásolja e, de én fin-t használok és nem f_in -t

Üdv: --==[B@z]==--

   
TPG - Guests | hsz       Online status #5572   2005.10.15 11:21 GMT+1 óra  
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

   
ShAdeVampirE - Guests | hsz       Online status #5571   2005.10.15 10:07 GMT+1 óra  
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)

   
ShAdeVampirE - Guests | hsz       Online status #5570   2005.10.15 10:06 GMT+1 óra  
(Módosította ShAdeVampirE 2005.10.15. 18:07-kor)

   
ShAdeVampirE - Guests | hsz       Online status #5569   2005.10.09 05:05 GMT+1 óra  
ThX, tényleg ez volt a hiba, már megint elfelejtettem...

------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])

   
WToma - Guests | hsz       Online status #5568   2005.10.08 10:07 GMT+1 óra  
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)

   
ShAdeVampirE - Guests | hsz       Online status #5567   2005.10.08 09:06 GMT+1 óra  
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])

   
HomeGnome - Guests | hsz       Online status #5566   2005.10.08 05:11 GMT+1 óra  
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)

   
ShAdeVampirE - Guests | hsz       Online status #5565   2005.10.08 03:31 GMT+1 óra  
igen, rájöttem, és ki is javítottam. Köszi

------------------------------------------------
([url="http://shadevampire.uw.hu">ShAdeVampirE otthona a neten...[/url])

   
WToma - Guests | hsz       Online status #5564   2005.10.08 03:17 GMT+1 óra  
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!"

   
gymisi - Guests | hsz       Online status #5563   2005.10.08 03:03 GMT+1 óra  
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)

   
ShAdeVampirE - Guests | hsz       Online status #5562   2005.10.08 02:55 GMT+1 óra  
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])