Czy możesz wyjaśnić, dlaczego „NIE MOŻESZ” zaimplementować statycznej funkcji memeber klasy w swoim pliku CPP? jakiś błąd? Zwykle nie ma ograniczeń co do miejsca implementacji takiej funkcji.
@winterTTr, Pytanie prawdopodobnie powstało, ponieważ większość przykładów / tutoriali w sieci nie przedstawia oddzielnego przykładu implementacji, zamiast tego deklaruje i definiuje go w nagłówku. Przynajmniej sześć pierwszych trafień mojej ulubionej wyszukiwarki na „statyczną funkcję składową w C ++” robi to w ten sposób i nie wyjaśnia, w jaki sposób można ją zaimplementować w osobnych plikach dla nowicjusza.
Tak, możesz zdefiniować statyczne funkcje składowe w pliku * .cpp. Jeśli zdefiniujesz to w nagłówku, kompilator domyślnie potraktuje to jako wbudowane. Nie oznacza to jednak, że w pliku wykonywalnym będą istniały oddzielne kopie statycznej funkcji składowej. Proszę śledzić ten post, aby dowiedzieć się więcej na ten temat:
Czy statyczne funkcje składowe w języku c ++ są kopiowane w wielu jednostkach tłumaczeniowych?
Jeśli zdefiniujesz go w treści klasy, automatycznie będzie to wartość domyślna. Jeśli znajduje się w nagłówku poza treścią klasy, lepiej oznacz go albo inlinealbo templateotrzymasz wiele błędów definicji z konsolidatora.
@crobar, masz rację, że brakuje przykładów złożonych z wielu plików, więc postanowiłem podzielić się następującymi informacjami w nadziei, że pomoże to innym:
#includeDyrektywa dosłownie oznacza „skopiować wszystkie dane z tego pliku do tego miejscu.” Więc kiedy włączysz plik nagłówkowy, jest on tekstowo w pliku kodu i wszystko w nim będzie tam, daje lub przyjmuje skutek innych dyrektyw lub zamian makr, gdy plik kodu (teraz nazywany jednostką kompilacji lub jednostką tłumaczenia ) jest przekazane z modułu preprocesora do modułu kompilatora.
Co oznacza, że deklaracja i definicja Twojej statycznej funkcji składowej przez cały czas znajdowały się w tym samym pliku ...
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.