windows - Er dette et gyldigt C ++-mønster?

Indlæg af Hanne Mølgaard Plasc

Problem




    Dette spørgsmål har allerede et svar her:

    

            

  •             statiske og eksterne globale variabler i C og C ++
                    
                        2 svar
                    

            

  •     

Bedste reference


Du mønster gør ikke hvad du synes det gør. /questions/11055802/static-and-extern-global-variables-in-c-and-c


Oversættelsesenheder er udarbejdet uafhængigt af hinanden. Hver oversættelsesenhed, der ønsker at bruge globalA, skal vide, hvad ClassA er defineret som. Så hver gang en given oversættelsesenhed er udarbejdet, vil MYHEADER ikke blive defineret, før din headerfil definerer den, og som sådan vil enhver oversættelsesenhed ende med at se static deklarationen, så hver oversættelsesenhed vil få sin egen lokal kopi af globalA, hvilket ikke er det, du vil have.


For at gøre det, du forsøger, skal du



  • slippe af med #ifdef blokken helt.

  • Udskift static erklæringen med extern erklæringen.

  • Flyt variablen globalA til en af ​​dine cpp-filer.



MyHeader.h


#ifndef MYHEADER
#define MYHEADER
class ClassA {
    // code for ClassA
    };
extern ClassA globalA;
#endif


MyHeader.cpp


#include "MyHeader.h"
ClassA globalA;