/ / Použitie globálnych premenných definovaných v hlavičkovom súbore - c ++

Použitie globálnych premenných definovaných v hlavičkovom súbore - c ++

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ď č. 1

Myslí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?