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

Łączenie kilku programów *.cpp do głównego maina

Object Storage Arubacloud
0 głosów
1,333 wizyt
pytanie zadane 8 lutego 2017 w C i C++ przez pivor Nowicjusz (160 p.)
edycja 8 lutego 2017 przez pivor
Witam, mam takie pytanie, mam zamiar zrobić sobie kilka programików (każdy we własnym pliku cpp), które były by odpalane za pomocą jednego głównego cpp który robiłby za menu główne.

Do tej pory próbowałem zagrania typu #include "program.cpp" który ma własną funkcne typu void program() który próbuję uruchomić za pomocą menu głównego ale wywala mi komunikat "Multiple Definition of 'program()'.

Czy jest na to jakaś skuteczna metoda?

edit: Może wyjaśnię jak planuję to zrobić:

Jest sobie menu główne które jest int main i np ma takie wybory:

1: Kalendarz

2: Kalkulator

3: Sortowanie

itd.

I np, dzisiaj zrobię sobie Kalendarz, a jutro Kalkulator a za parę dni Sortowanie, i chciałbym, żeby np. taki oddzielny program był w miarę łatwo dorzucany do biblioteki.

Nie wiem czy dobrze kombinuję i czy nie lepiej po prostu wszystko robić w jednym pliku, ale tak chciałem zrobić dla ciekawości.

5 odpowiedzi

+1 głos
odpowiedź 8 lutego 2017 przez Ehlert Ekspert (212,670 p.)
Masz programowanie obiektowe, funkcyjne, podział projektu na pliki, foldery i namespace'y. Więc po co takie cuda?
komentarz 8 lutego 2017 przez pivor Nowicjusz (160 p.)
Mam zamiar dla ćwiczeń tworzyć własne programy i dorzucać takiej swojej "biblioteki", może źle kombinuje, ale taktyka polega na tym, że np tworzę jakiś program, dorzucam go do "menu głównego" i staje się on częścią całości.
komentarz 8 lutego 2017 przez Ehlert Ekspert (212,670 p.)
To stwórz jeden program z menu, a te twoje programy składowe będą modułami. Naucz się OOP.
0 głosów
odpowiedź 8 lutego 2017 przez JAKUBW Nałogowiec (33,470 p.)

Tak. Błąd wyskakuje, ponieważ masz kilka funkcji o takiej samej nazwie. Skąd kompilator ma wiedzieć którą odpalić? Rozwiązaniem jest zmiana nazw funkcji, bo program niewiele mówi. Ewentualnie wrzucenie ich do namespace ów.

komentarz 8 lutego 2017 przez pivor Nowicjusz (160 p.)
"void program();" dałem po prostu przykład, u mnie będzie coś takiego, void kalendarz(); void kalkulator(); itd.
komentarz 8 lutego 2017 przez JAKUBW Nałogowiec (33,470 p.)
Gdy będą void kalendarz i void kalkulator to nie będzie błędu, bo są inne nazwy
komentarz 8 lutego 2017 przez pivor Nowicjusz (160 p.)

No właśnie jak zrobiłem do tej pory void kalendarz(), to już na wstępie w pliku kalendarz.cpp wyskakuje mi ten błąd. Wygląda to mniej więcej tak:

kalendarz.cpp

#include <iostream>

using namespace std;

void kalendarz()

{ cout wybrano kalendarz }

menuglowne.cpp

#include <iostream>

#include "kalendarz.cpp"

using namespace std;

int main()

{

kalendarz()

return 0;

}

 

 

komentarz 8 lutego 2017 przez JAKUBW Nałogowiec (33,470 p.)
Bo includować możesz tylko pliki nagłówkówkowe (rozszerzenie h lub hpp). Utwórz plik kalendarz.hpp załącz go do projektu a w jego ciele napisz deklarację funkcji. Następnie z innych plików podłącz się za pomocą include do tego pliku hpp.
komentarz 8 lutego 2017 przez JAKUBW Nałogowiec (33,470 p.)

Generalnie to tak powinna wyglądać zawartość pliku kalendarz.hpp:

#ifndef KALENDARZ_HPP
#define KALENDARZ_HPP
#include "kalendarz.hpp"

//jakieś includy np.
//#include <iostream>

void kalendarz();


#endif //KALENDARZ_HPP

A plik kalendarz.cpp

#include <iostream>
#include "kalendarz.hpp"

void kalendarz()
{
    std::cout<<"Wybrano kalendarz"<<std::endl;
}

 

komentarz 11 lutego 2017 przez pivor Nowicjusz (160 p.)
Czyli w skrócie nie da się bezpośrednio includować innych plików cpp tylko trzeba rozbijać program na .h i .hpp? Chciałem w ten sposób porządkować swój program na pliki.
komentarz 11 lutego 2017 przez JAKUBW Nałogowiec (33,470 p.)
Generalnie w C++ nie, w JAVA czy C# jest jeden plik. Jest to wina tego, że C++ jest starym, zrobionym dla wolnych komputerów językiem. Mógłbyś spróbować tylko pisać w h lub hpp ale wiedz, że jest to niezgodne ze standardami C++ i nie zawsze będzie działać.
0 głosów
odpowiedź 11 lutego 2017 przez pivor Nowicjusz (160 p.)
Przepraszam za późny odzew ale byłem zajęty.

Więc z waszych odpowiedzi wniosek jest taki, że nie ma możliwości "podpinania" plików cpp do siebie nawzajem, tak by tworzyły całość? Miałem nadzieje na porządkowanie swojego programu poprzez dzielenie go na pliki cpp tak jakby to były funkcje no ale cóż.
–1 głos
odpowiedź 8 lutego 2017 przez Hansik Box Nowicjusz (240 p.)
Jeśli chodzi Ci tylko o wywołanie jednego programu drugim, to ja bym to zrobił tak:

Załączyłbym do programu bibliotekę Cstdlib,

Następnie wywołałbym program za pomocą funkcji system( start "nazwa programu.rozszerzenie" );

Nie wiem czy dokładnie oto Ci chodziło, ale myślę, że to będzie dobry sposób

Pozdrawiam
komentarz 8 lutego 2017 przez pivor Nowicjusz (160 p.)
Ale czy to się zamknie w "jednym okienku/konsoli" ?
komentarz 8 lutego 2017 przez Hansik Box Nowicjusz (240 p.)
To będzie wyglądało tak:

Masz menu główne,
Wywołujesz ten program,
tamten się zamyka i otwiera się ten nowy.
Jeśli chcesz znowu wrócić do tamtego programu dajesz system( start "nazwa programu.rozszerzenie" ); a po tym exit;
komentarz 8 lutego 2017 przez Hansik Box Nowicjusz (240 p.)
I wraca do 1 programu, a tamten się zamyka...

Oto Ci chodziło?
komentarz 8 lutego 2017 przez pivor Nowicjusz (160 p.)
Mniej więcej, a jest możliwość zrobienia tego w "jednym okienku/konsoli".
komentarz 8 lutego 2017 przez Hansik Box Nowicjusz (240 p.)
edycja 8 lutego 2017 przez Hansik Box
Chyba wiem o co ci chodzi.

Chcesz żeby po wywołaniu jakieś funkcji ona otwierała się w czystej konsoli?

Jeśli tak to na początku ów funkcji dodaj system( cls); i go tam zostaw.

Za każdym razem, gdy będziesz ją wywoływać otrzymasz wyczyszczoną konsolę z poprzedniej funkcji
komentarz 8 lutego 2017 przez Hansik Box Nowicjusz (240 p.)
Oto Ci Chodziło?
–1 głos
odpowiedź 8 lutego 2017 przez Hansik Box Nowicjusz (240 p.)
Okej, tak jak ty mówisz.

Ja bym wolał zostawić ten program i następnego dnia go dokończyć i wszystko w jednym programie, tak byłoby lepiej.

Jak już muszą być te oddzielne programy to najlepiej, żeby całkowicie było oddzielne i każdy był od nowa napisany...

Podobne pytania

0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 10 kwietnia 2016 w C i C++ przez MisterVento3 Użytkownik (830 p.)
0 głosów
1 odpowiedź 697 wizyt
pytanie zadane 12 listopada 2016 w C i C++ przez yomanda Nowicjusz (190 p.)
0 głosów
4 odpowiedzi 776 wizyt

92,565 zapytań

141,417 odpowiedzi

319,601 komentarzy

61,950 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...