• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Gdzie deklarować obiekty, korzystając z kilku plików?

0 głosów
267 wizyt
pytanie zadane 18 stycznia 2019 w C i C++ przez Seqak Początkujący (420 p.)
Cześć,

Mam taki problem, używam trzech plików do projektu: main.cpp, headers.h i class.cpp. Borykam się z zagwostką, gdzie deklarować obiekty. W pliku class.cpp implementuję metody, w których operuję na konkretnych obiektach, które czasami wpływają na siebie wzajemnie. Druga opcja jest taka, że tych samych obiektów potrzebuję w pliku main.cpp na przykład do wywoływania metod konkretnego obiektu..

- W momencie, gdy obiekt X jest zadeklarowany w main.cpp, nie mogę używać go w class.cpp ( jakby nie istnieje ). Na odwrót to samo, chyba, obiekt w main.cpp jest bezpośrednio w funkcji main.

- Jeśli zadeklaruję obiekt X w obu tych plikach, pojawia się error, że są zadeklarowane dwa takie same obiekty.

Obawiam się, że postępuje niezgodnie z jakąś dobrą praktyką, a wolałbym nie robić bagna w kodzie. Jeśli staram się zrobić, coś niedopuszczalnego i głupiego to krzyczcie i będę wdzięczny za wszystkie rady.

1 odpowiedź

+1 głos
odpowiedź 18 stycznia 2019 przez Hiskiel Pasjonat (22,830 p.)
wybrane 18 stycznia 2019 przez Seqak
 
Najlepsza
masz main.cpp, stwórz jeszcze pliki .h i .cpp dla klas.. Jeśli klasy będą potrzebowały siebie nawzajem (co jest normalne), to wystarczy, że będą siebie widzieć.
komentarz 18 stycznia 2019 przez Seqak Początkujący (420 p.)
Jeśli źle zrozumiałem popraw mnie proszę.

Czyli poza tymi trzema plikami, które już posiadam (main.cpp, headers.h, class.cpp), stworzyć każdej klasie osobny plik? Np. mam class Character, class Enemy itp i dla nich dedykowany plik?
komentarz 18 stycznia 2019 przez Hiskiel Pasjonat (22,830 p.)
Nie wiem po co masz pliki headers.h i class.cpp, ale zazwyczaj robi się osobno dla każdej większej klasy osobne pliki *.h i *.cpp
komentarz 18 stycznia 2019 przez Seqak Początkujący (420 p.)
Ok, łapię.

Te pliki to pozostałości z poradnika Pan Mirka :)

To zapytam w tę stronę, czy obiekty tworzymy jedynie w pliku głównym w funkcji main? Bo idąc moim dotychczasowym tokiem działania, to chciałbym móc operować na stworzonym obiekcie w kilku plikach (np. Żeby w jednym pliku handel, obiekt "Postać" dostał nowy przedmiot, a w pliku walka otrzymuje 10 exp (przykłady wymyśliłem naprędce)). Chyba, że tak nie można. Cały czas jakby próbuję zapytać, czy obiekt można "transportować" między plikami i metodami w nich zawartymi na potrzeby np. rozwoju postaci?

Jeśli mieszam to wybacz, trochę ciężko mi zadać pytanie, w momencie kiedy nie znam jeszcze odpowiednio dobrze działania c++. Tj mam problem, ale rozgałęzienie tego problemu, skutkuje tym, że nie wiem jak zadać pytanie tak, żeby dostatecznie przedstawić o co mi chodzi.

PS. I tak już jestem wdzięczny za te wskazówki.
komentarz 18 stycznia 2019 przez Hiskiel Pasjonat (22,830 p.)

"Czy obiekty tworzymy jedynie w main.cpp w main"

Nie. Jeśli utworzysz jakąś klasę, to jej instancję, którą nazywamy obiektem możesz utworzyć w jakiejkolwiek funkcji.

"Cały czas jakby próbuję zapytać, czy obiekt można "transportować" między plikami i metodami w nich zawartymi na potrzeby np. rozwoju postaci?"

Tak, chyba wiem o co Ci chodzi.

exp.h:

class Exp{
   //getter, setter https://forum.pasja-informatyki.pl/37282/czym-sa-gettery-i-settery-w-c
    ...
    int exp_count;
}
----------------------------------------
exp.cpp:

#include "exp.h"

....
---------------------------------------
player.h:

#include "exp.h"

class Player{
    bool AddExp(Exp&); //gitarnie zadziała
    ...
    
    Exp exp;    //gitarnie, zadziała
}
-----------------------------------------
player.cpp:

#include "player.h"
...
bool Player::AddExp(Exp &exp){
   ...
}
-----------------------------------------
main.cpp:
#include "exp.h"
#include "player.h"
...

int main(){
    Player main_character;
    Exp player_exp;
    //GItarnie, zadziała
}
--------------------------------------

 

komentarz 18 stycznia 2019 przez Seqak Początkujący (420 p.)
O to mi chodziło!

Naprawdę, wielkie dzięki za pomoc, właśnie rozwiązałeś mi sporo zagwozdek. Mogę ruszyć dalej. :)

Podobne pytania

0 głosów
1 odpowiedź 198 wizyt
+1 głos
1 odpowiedź 102 wizyt
pytanie zadane 29 marca 2016 w C i C++ przez niezalogowany

93,424 zapytań

142,421 odpowiedzi

322,643 komentarzy

62,782 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...