No proste, pokud mas nejaky hlavickovy soubor, tak tam nesmi byt definice funkce, jen prototypy. Nebo staticke funkce nebo inline funkce...
#pragma once
// tato definice zpusobi, ze hlavickovy soubor nemuze byt includovan ve vice jak jednom .cpp souboru
int funkce(int x)
{
return x*x;
}
// tato definice muze byt includovana ve vice jak jednom .cpp souboru
// modifikator static znamena, ze funkce neni dostupna z jinych kompilacnich jednotek (= .obj souboru)
static int funkce2(int x)
{
return x*x;
}
// tato definice muze byt includovana ve vice jak jednom .cpp souboru
// modifikator inline u kratkych funkci muze zajistit, ze se vubec nevola jako funkce
inline int funkce3(int x)
{
return x*x;
}
// toto je deklarace (prototyp funkce), definice musi byt v nekterem z .cpp souboru (ale jen v jedinem!)
int funkce4(int x);
Podobne je to u super globalnich promennych. Tam se zase pouziva klicove slovo extern. Proste v hlavickovem souboru mas extern int nejakaSuperGlobalniPromenna; a v jednom z cpp souboru pak mas int nejakaSuperGlobalniPromenna; (jinak by to pro zmenu hlasilo neexistujici symbol)