Skocz do zawartości
amdek

VC++ PROBLEM NR2 !!!

Rekomendowane odpowiedzi

Mam klase abstrakcyjna system w pliku system.h , a w plikach linux.h

+linux.cpp i windows.h+windows.cpp deklaracje+definicje klas pochodnych

(linux,windows) od klasy system (sa to duze klasy !!)!!!!

 

I teraz w pliku main.cpp chcialbym stworzyc obiekt odpowiedniej klasy

pochodnej w zaleznosci od systemu na jakim chce ten program skompilowac !!

Tak aby program dzialal na obu OS-ach (wszystkie pliki dla obu OS

sa takie same bo w tych klasach pochodny obsluguje roznice miedzy

systemami wiec musze tylko wybrac odpowiedni header z klasa pochodna)!!

 

Mam do tego uzyc Makefile !!

Jak powinien wygladac makefile(ta najwazniejsza czesc!) i czy powinny byc

jakies dyrektywy preprocesora w main.cpp a moze jeszcze gdzies??Jakie !!

 

Jak to zrobic POMOCY!! Od tego zalezy moje zaliczenie z obiektowki :( !!!!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Kazdy kompilator powinien (chyba wszystkie to robia) definiowac symbol, za pomoca ktorego mozna sprawdzic na jakim systemie jest on uzywany.

Sprawdza sie to za pomoca dyrektywy #ifdef NAZWA_SYMOBLU

nie pamietam jak dokladnie definiiuje to np. VC++, ale mniej wiecej wygladc to bedzie tak:

 

#ifdef WINDOWS

#include "windows.h"

#else

#include "linux.h"

#endif

 

Dokladnych nazw tych symboli musisz juz poszukac w dokumentacji do kompilatora.

 

Nie wiem jak to zrobic za pomoca makefile, jedynie tym sposobem..

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Oki przyjalem ale jest jeszcze jeden problem !!!

 

Jak mam napisac w kodzie :

 

linux w;

albo

windows w;

 

bo tutaj tez trza wybrac gdy definiuje obiekt!! tutaj juz chyba nie moge

uzyc dyrektyw preprocesora wiec jak stworzyc ten obiekt ??!!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

yyy, myslalem, ze w tych plikach klasy nazwane sa tak samo, tylko ciala funkcji sa odpowiednie dla odpowiedneigo systemu, a tu jednak i nazwy inne..

no ale i to da sie obejsc... chyba :)

Sprobuj:

#ifdef WINDOWS  #define CLASSNAME windows#else  #define CLASSNAME linux#endif...CLASSNAME obiekt;itd...
Nie sprawdzalem tego rozwiazania, ale nie widze przeszkod zeby to dzialalo :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chyba mysli tymi samymi torami :P

 

Tak jak mowiles VC definiuje WIN32 przy kazdej kompilacji !!opcja /D ,

ktora wylookalem w opcje projektu, C/C++ ,preprocessor i tam jest caly

box z tymi opcjami :) (czegos sie od Ciebie nauczylem :P). A potem troche

pomyslalem hihihi i wypocilem to :

 

#if WIN32

 

#include "Winows.h"

#define Typ Windows

 

#else

 

#include "Linux.h"

#define Typ Linux

 

#endif

 

main {

Typ w;

}

 

Hehe i wszystko dzialac powinno bo zapewne pod linuxen GCC nie ma

zdefiniowanego WIN32 :P

 

THX

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...