Najskôr viem, že to nie je „správne.„Rád však veci otestujem a narazil som na tento problém, že ak v hlavičkovom súbore vytvorím globálnu premennú a v súbore main.cpp ju vyhlásim za externú, môžem ju použiť (Všimnite si, že som nezahrnul hlavička triedy na tomto príklade). Ak sa však skutočne pokúsim urobiť to isté, rozdiel je iba v tom, že zahrniem hlavičku triedy, zobrazí sa chyba.
(chyba: ld vrátil 1 výstupný stav).
Zaujímalo by ma, prečo sa to deje?
Kód podľa požiadavky:
main.cpp:
#include <iostream>
#include "albino.h"
using namespace std;
extern int iVar;
int main()
{
cout << iVar << endl;
}
albino.h:
#ifndef ALBINO_H
#define ALBINO_H
int iVar = 10;
class albino
{
public:
albino();
};
#endif // ALBINO_H
Albino.cpp nič nemá.
CHYBA: || chyba: ld vrátil 1 výstupný stav |
odpovede:
2 pre odpoveď č. 1Myslím, že to robíš zle.
Môžeš vymedziť globálna premenná iba raz; ale ty možeš vyhlásiť to veľa krát, kdekoľvek ho chcete použiť.
To znamená int i = 0;
by mali iba existovať raz, takže _nie v hlavičke, ale presne v jednom súbore cpp (nezáleží na kompilátore, ktorý z nich, iba na ľuďoch, ktorí sa ho snažia nájsť); a extern int i;
môže byť v hlavičke, takže sa to opakuje všade. Pozri tiež Ako môžem použiť externé zdieľanie premenných medzi zdrojovými súbormi?