Problem z rozmieszczeniem kodu w plikach.

Odpowiedz Nowy wątek
2011-07-12 12:44
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.

Pozostało 580 znaków

2011-07-12 13:19

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).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2011-07-12 13:40
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ę? :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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