Deklaracje i definicje w jednym pliku

0

Witajcie,
Mam pytanie, przypuszczam że dość proste, jednak nie dla mnie:) Mam załóżmy kod główny w main.cpp, i chce korzystać w nim z funkcji z func.cpp. Tak więc, na początek w main.cpp daję

#include "main.cpp"

I zaczyna się jazda z multiple definitions dla każdej z zaimplementowanych funkcji. I teraz moje pytanie - bo gdyby mógł zrobić definicje i deklaracje osobno, w cpp i h, to by było jasne. Jak to zawrzeć w jednym pliku? Jakieś dyrektywy? Dodam, że wszystkie funkcje są przeciążane(wszystko dla jednej nazwy), a korzystam z DevC++

Poooommmooooccccy;p

Pozd.

0

przepraszam, pomyłka, oczywiście includuję

 #include "func.cpp"
0

Należy includować jedynie plik nagłówkowy z deklaracjami tych funkcji. Następnie należy skompilować oba pliki i zlinkować.
W przypadku Deva należy:

  1. Odinstalować deva.
  2. Zainstalować Code::Blocks
  3. Stworzyc nowy projekt. Dodać do niego pliki main.cpp, func.cpp i func.h
  4. W main.cpp dodać #include "func.h" i zbuildować wszystko.
0

OK, ale problem jest taki, że do sprawdzenia muszę wysłać jedynie plik cpp, który później będzie testowany(i może zawierać tylko funkcje o tej jednej nazwie). Dla mnie to też jest bez sensu, bo pewnie będzie includowany w testach, ale nie ja ustalam reguły.

0

Albo może tak.

Po wysłaniu na sprawdzarkę:
make: Entering directory /home/testerka/work' g++ test2.cpp -o out -static test2.cpp:4:20: error: func.cpp: No such file or directory test2.cpp: In function ‘int main()’: test2.cpp:10: error: ‘catch22’ was not declared in this scope make: *** [2] Error 1 make: Leaving directory/home/testerka/work'

Dziwi mnie to no such file or directory... Takich testów jest 8, po jednym dla każdego przeciążenia.

0

Ale ja nadal nie widzę problemu. Wykładowca kazał wam wysłać plik *.cpp zawierający definicję funkcji o danej sygnaturze? To znaczy ze on u siebie zrobi dokładnie to co napisałem powyżej. Czyli w pliku z funkcją main() ma deklarację takiej funkcji i wywołania tej funkcji, a oprócz tego ma makefile który skompiluje oba pliki (jego testujący i ten twój) i je zlinkuje.

@up ty tak poważnie? Wysłałeś do sprawdzarki plik cpp który próbuje includować inny plik którego TAM NIE MA. To i nie dziwota że masz no such file.

0

Zacznijmy od tego, że to nie jest zadanie dla mnie;) Tak więc schemat działania wygląda niestety tak, że jedyną informacją na temat niedziałania jest to, co zamieściłem powyżej. W poleceniu jest napisane, żeby wysłać plik cpp z wyłącznie definicjami lub deklaracjami funkcji o nazwie catch22. Próba wrzucenia samego pliku cpp, kończy podobno się tym samym. Nie wiem, zaczynam podejrzewać jakiś błąd sprawdzarki albo cholera wie. Ponadto widzę, że w poleceniu jest napisane, że należy spakować zipem. Nie jest pod jaką nazwą. Może ona po prostu nie widzi tego ładowanego pliku...
Pomijając fakt, że jeśli gość ma gotowy plik .h, to prototypy funkcji z niego mogą nie zgadzać się z definicjami...

0

Chociaż możesz mieć rację z tym wyodrębnieniem u mnie do cpp i h. Poprzednio było wysyłane na zasadzie "wytnij wszystko oprócz catch22-ów". Także zrobię tak jak mówisz, wyślę, zostanie wysłane na sprawdzarkę i wtedy dostanę odpowiedź:) Więc jakbyś mógł, zajrzyj tu wieczorem w celu ew. dalszych konsultacji:)

Pozdr.

0
tewu napisał(a)

Chociaż możesz mieć rację z tym wyodrębnieniem

Sądziłeś chociaż przez chwilę, że nie ma racji? To po co pytasz na forum skoro wiesz lepiej:]

0
odp napisał(a)
tewu napisał(a)

Chociaż możesz mieć rację z tym wyodrębnieniem

Sądziłeś chociaż przez chwilę, że nie ma racji? To po co pytasz na forum skoro wiesz lepiej:]

Nie masz niczego innego do robienia w niedzielę oprócz interpretowania(błędnego, swoją drogą) cudzych wypowiedzi na forum? Współczuję. I tak cieszę się, że nie napisałeś "poszukaj w google". Dzięki!

Mam już odpowiedzi ze sprawdzarki:
make: Entering directory /home/testerka/work' g++ test1.cpp -o out -static In file included from test1.cpp:4: prog.cpp:5:18: error: prog.h: No such file or directory In file included from test1.cpp:4: prog.cpp: In function ‘void catch22(unsigned int, int&, ...)’: prog.cpp:47: warning: second parameter of ‘va_start’ not last named argument make: *** [1] Error 1 make: Leaving directory/home/testerka/work'

Czyli jakby nie miał tego nagłówkowego. A wysłać go mu nie można... A ten warning, to swoją drogą iny problem - ma być (liczba argumentów, wynik, kolejne liczby), a wiadomo, że liczba argumentów ma być jako ostatnia przed ...(...) Masz jakiś pomysł?

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