Problem z rozmieszczeniem kodu w plikach.

0
// main.cpp
#include "main.hpp"
#include "createform.hpp"


// main.hpp
#ifndef MAIN_H
#define MAIN_H

(...)

#endif


// createform.hpp
#ifndef CREATE_H
#define CREATE_H

(...)

HWND hEdit;

(...)

#endif


// createform.cpp
#include "createform.hpp"

Możecie mi wytłumaczyć dlaczego przy takim podziale dubluje mi definicję zmiennej hEdit (wyskakuje błąd "multiple definition of hEdit")? Czyż nie po to daję #ifndef CREATE_H, żeby uniknąć dublowania tej definicji zmiennej hEdit w plikach createform.cpp i main.cpp?

Wszystko śmiga jak tą przykładową zmienną hEdit przeniosę do "main.hpp", a w "createform.hpp" umieszczę wpis "extern HWND hEdit". Problem w tym, ze takich zmiennych w stylu hEdit mam ponad sto, razem tworzą bardzo rozbudowany formularz i nie wydaje mi się, żeby korzystnym rozwiązaniem dla czytelności kodu było umieszczenie ich w "main.hpp", a potem ponowne wypisanie tych definicji w pliku "createform.hpp" , tylko że tym razem z poprzedzeniem "extern". Przez to mam dodatkowo całą masę nowych linii w swoim kodzie.

Chyba, że tak właśnie ma to wyglądać?

Z góry dzięki za pomoc.

0

w pliku nagłówkowym zmienne globalne powinny być deklarowane ze słowem kluczowym extern.
Taka zmienna powinna się pojawić bez słowa extern tylko raz w jednym pliku cpp (w twoim przypadku powinno być to createform.cpp).

0
MarekR22 napisał(a)

w pliku nagłówkowym zmienne globalne powinny być deklarowane ze słowem kluczowym extern.
Taka zmienna powinna się pojawić bez słowa extern tylko raz w jednym pliku cpp (w twoim przypadku powinno być to createform.cpp).

Dzięki! Czyli krótko mówiąc powinno to wyglądać w poniższy sposób:

// createform.hpp
#ifndef CREATE_H
#define CREATE_H
 
extern HWND hEdit;
 
#endif
 

// createform.cpp
#include "createform.hpp"

HWND hEdit;

Zgadza się? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1