2012-12-29 18 views
6

Więc uczę się tworzyć pliki nagłówkowe. Tu jest mój kodu (trzy oddzielne pliki)Pliki nagłówkowe uczące się w C++. Co słychać w tym średniku?

//Main.cpp 
#include <iostream> 
#include "functions.h" 
; 
using namespace std; 

int main() 
{ 
    cout << multiply(3, 4) << endl; 

    return 0; 
} 

//functions.cpp 
int multiply(int x, int y) 
{ 
    return x * y; 
} 

//functions.h 
#ifndef FUNCTIONS_H_ 
#define FUNCTIONS_H_ 

int multiply(int x, int y) 

#endif 

Kod kompiluje i działa, ale część, która jest mi przeszkadza to w main.cpp. Pod średnikiem pod "functions.h" i powyżej "using namespace" znajduje się ten średnik.

Położyłem to tam, ponieważ studio graficzne stwierdziło, że oczekiwało jednego, ale nie mam pojęcia, dlaczego. Nie widzę tego w samouczkach.

Oczywiście, działa. Ale nie podoba mi się, że nie wiem, dlaczego tam jest i że tak nie powinno być.

Dzięki za pomoc!

+0

Odkąd uczysz się języka C++, naucz się także w pełni kwalifikować typy/funkcje w standardowej bibliotece. Wpisywanie 'std ::' nie jest takie żmudne. – Praetorian

+0

Po prostu trochę o tym czytałem. Ma sens, że nie nazwałbyś pliku nagłówkowego. Ale czy uważasz, że istnieje praktyczny sposób na pominięcie go w moim osobistym kodowaniu testowym? (oprócz tworzenia przyzwyczajeń) – Wimp

+2

Nie dodałeś @Praetorian, więc prawdopodobnie nie zobaczył twojego pytania. Kwestia "używania przestrzeni nazw" wydaje się być debatą religijną pełną opinii, a moja opinia religijna jest taka, że ​​w przypadku małych programów wszystko jest w porządku. A jeśli jesteś jedyną osobą, która kiedykolwiek nad nią popracuje, rób to, co ci się podoba. Ale jak zauważyłeś, uważaj na rozwój złych nawyków. –

Odpowiedz

14

powodu pominięcia jeden średnik w functions.h

int multiply(int x, int y); 
          ^^^^ here 

C++ oddziela wypowiedzi średnikami.

Funkcja #include directive powoduje przesłanie zawartości pliku "functions.h" wraz z zawartością pliku do kompilatora. Wynika to z tego, że błędy kompilacji spowodowane błędami w plikach nagłówkowych są często zgłaszane w kodzie, który je zawiera. (Thx to Philipp)

+0

AH! Wiedziałem, że to będzie coś głupio prostego. Wielkie dzięki! Działa teraz :) – Wimp

+4

Co należy podkreślić: dyrektywa include w C++ oznacza nic innego jak "skopiuj i wklej zawartość tego pliku tutaj". W wyniku tego błędy kompilacji spowodowane błędami w plikach nagłówkowych są często zgłaszane w kodzie, który je zawiera. – Philipp

+0

Masz na myśli, jak powiedziałem w mojej odpowiedzi? Ale ponieważ musiałem to napisać, nie dotarłem tam pierwszy. –

6

Ponieważ preprocesor C nic nie wie o składni C - można użyć do złożenia e-maili, plików źródłowych asemblera lub HTML, jeśli chcesz, to po prostu umieszcza całe źródło w jednym długim pliku, aby kompilator faktycznie się skompilował.

Brakuje też średnika po int multiply(int x, int y) w "functions.h".

+0

+1 dla zewnętrznych zastosowań preprocesora C. Co za nowatorski pomysł = P – WhozCraig