Kompilacja plików podzielonych na moduły.

0

Witajcie,
próbuję napisać dość prosty program ale niestety utknąłem w jednym miejscu.
Plik jest podzielony na dwa moduły, w oby dwóch powinno znaleźć się wywołanie funkcji 'wieksza'.
Kompiluję:
g++ 29.cpp -c
g++ 29_druga.cpp -c
g++ 29.o 29_druga.o
program się nie kompiluje albo po uruchomieniu nie ma żadnej rekcji.
Przeczytałem w symfonii, że przy deklaracji nie umieszcza się externa, więc nie wiem gdzie leży błąd.
Plik 29.cpp

 #include <iostream>
using namespace std;

int wieksza(int a, int b);
int main()
{
  wieksza(3,4);
  wieksza(8,6);

  return 0;
}

Plik 29_druga.cpp:

 #include <iostream>

using namespace std;

int wieksza(int a, int b)
{
  if(a > b) return a;
  else if(b > a) return b;
  else if(a = b)
    {
      cout << "sa rowne" << endl;
    }
}



void druga()
{
  cout << "druga";
  wieksza(4,3);
  wieksza(0,1);

}
0

w którym miejscu pojawia się błąd. jaki błąd? nie lepiej wrzucić oba pliki do jednego projektu i niech się IDE martwi o to jak to skompilować?

0

Jasne, że łatwiej ale to jest proste ćwiczenie, którego celem jest napisanie programu podzielonego na dwa pliki.
Wersja pierwsza z dyrektywą include i plikiem .h
Wersja druga bez pliku .h
Ten błąd przestał się pojawiać, teraz po wywołaniu a.out nie mam żadnej reakcji.
Nie jestem w stanie powiedzieć co się zmieniło.

edit:
tamto przypisanie było przypadkowe, głupi błąd :|

0
green96 napisał(a)

Jasne, że łatwiej ale to jest proste ćwiczenie, którego celem jest napisanie programu podzielonego na dwa pliki.
Wersja pierwsza z dyrektywą include i plikiem .h
Wersja druga bez pliku .h

wersja pierwsza z plikiem nagłówkowym też nie działa ( stworzyłem plik nagłówkowy, którym umieściłem deklaracje funkcji większa, dałem mu rozszerzenie .h, a w pliku 29.cpp dodałem #include "29_druga.h".

Po wywołaniu ./a.out nie ma żadnej reakcji.

0

wróć, jakiej ty reakcji oczekujesz skoro wypisujesz komunikat na ekran tylko i wyłącznie gdy liczby są równe, a w funkcji main wszystkie wywołania są dla różnych liczb?

PS. te pliki co masz w pierwszym poście poza tym else if są poprawne i nie dodawaj żadnych plików nagłówkowych

0

Liczyłem na to, że na ekranie zostanie wypisana większa liczba... Może teraz się ośmieszę ale wydawało mi się, że return zachowa się jak cout. Umówmy się, że staram się zrobić drugą wersję pliku, bez pliku nagłówkowego. Nie bardzo też rozumiem, po co umieszczamy wywołania w funkcji drugiej, skoro z nich nie korzystamy ( wykonywanie poleceń występuję od góry do dołu w mainie ).

Może dla jasności umieszczę treść zadanie, które chciałem wykonać.
Napisz program składający się z funkcji 'main' i funkcji 'druga' będących w dwóch różnych plikach. Następnie napisz definicję funkcji o nazwie 'większa' która przyjmuje dwa argumenty typu int, a jako rezultat zwraca większy z nich. Wywołania tej funkcji mają być zarówno z funkcji 'main', jak i z funkcji 'druga'.
Zrób to na dwa sposoby:

  1. używając pliku .h włączanego dyrektywą include.
  2. bez użycia pliku nagłówkowego.

Przedstawiłem cały mój tok rozumowania, proszę o wyrozumiałość jeżeli zauważycie jakieś rażące błędy, staram się wszystko zrozumieć, wcześniej nie programowałem.

0

Jak chcesz to na if'ach rozwiązać to możesz zrobić funkcję void, żeby nie wsadzać instrukcji return, a w bloku if daj informacje o większej zmiennej.

PS Zwrócić rezultat jest moim zdaniem trochę niejednoznaczne. Można zwrócić rezultat tekstowo, jak i funkcją return, to tak dla wytłumaczenia dlaczego proponuję void.

0

@krwq
zamieniłem tamte returny na couty...
@black
Faktycznie ta funkcja może być typu void ale czytając polecenie jasno zrozumiałem, że ma zwracać typ int więc skąd miałem wiedzieć, że funkcja jednak będzie typu void ?

  1. A gdybym chciał zostać przy int i skorzystać z instrukcji return ?
  2. Dlaczego autor tego ćwiczenie każe umieścić wywołanie funkcji wieksza w funkcji druga, skoro nigdzie nie otrzymujemy efektów działania tej funkcji druga?

1 użytkowników online, w tym zalogowanych: 0, gości: 1