bati22 Temat założony przez niniejszego użytkownika |
Zmienne statyczne, kilka plików » 2016-11-01 16:55:28 Witam Mam dwa pliki z następującym kodem (są to listingi 9.7 i 9.8 z książki "Język C++ Szkoła programowania" Stephena Prata: #include <iostream> #include "twofile2.h" int tom = 3; int dick = 30; static int harry = 300;
void remote_access();
int main() { using namespace std; cout << "Funkcja main() zwraca następujące adresy:\n"; cout << & tom << " = &tom, " << & dick << " = &dick, "; cout << & harry << " = &harry\n"; remote_access(); return 0; }
oraz #ifndef TWOFILE_H_ #define TWOFILE_H_ extern int tom; static int dick = 10; int harry = 200;
void remote_access() { using namespace std; cout << "Funkcja remote_access() zwraca następujące adresy:\n"; cout << & tom << " = &tom, " << & dick << " = &dick, "; cout << & harry << " = &harry\n"; } #endif
Błędy kompilacji dotyczą jedynie zmiennych dick i harry, gdyż następuje ich redefinicja. Jednak przecież nie powinno tak być, jeśli używam zmiennych statycznych. Dlaczego więc nie mogę mojego kodu skompilować? |
|
pekfos |
» 2016-11-01 18:39:47 Jaki błąd? |
|
bati22 Temat założony przez niniejszego użytkownika |
» 2016-11-01 20:10:24 D:\Materiały\C++ Szkoła programowania\Rozdzial09\twofile1.cpp|5|error: redefinition of 'int dick'| D:\Materiały\C++ Szkoła programowania\Rozdzial09\twofile2.h|5|error: 'int dick' previously defined here| D:\Materiały\C++ Szkoła programowania\Rozdzial09\twofile1.cpp|6|error: redefinition of 'int harry'| D:\Materiały\C++ Szkoła programowania\Rozdzial09\twofile2.h|6|error: 'int harry' previously defined here| ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
|
|
pekfos |
» 2016-11-02 00:26:59 Podaj plik .h. |
|
bati22 Temat założony przez niniejszego użytkownika |
» 2016-11-02 07:09:00 To jest właśnie plik twofile2.h, który załączyłem w pierwszym pliku. Komentarz wskazuje, że ma rozszerzenie .cpp, ale zmieniłem je na na .h |
|
pekfos |
» 2016-11-02 15:33:40 Nie możesz 2 razy zdefiniować zmiennej w jednej jednostce translacji. |
|
bati22 Temat założony przez niniejszego użytkownika |
» 2016-11-05 08:27:40 Ok, ale jak używam słowa static, to nie oznacza, że definiuję zmienną tylko dla danego pliku? |
|
pekfos |
» 2016-11-05 15:27:24 ale jak używam słowa static, to nie oznacza, że definiuję zmienną tylko dla danego pliku? |
W C++ liczy się tylko podział na pliki .cpp. Kod nagłówków jest wklejany w miejsce użycia, więc w trakcie faktycznej kompilacji, nagłówki nie istnieją. Nie możesz mieć zdefiniowanych dwóch zmiennych, bo niby której należałoby użyć..? static sprawia, że nazwa zmiennej nie wystaje poza skompilowany plik .cpp, więc możesz użyć tej nazwy w innym miejscu nie powodując konfliktu. |
|
« 1 » 2 |