Jeśli jest to w pliku nagłówka, jesteś definiowanie xyz
Za każdym razem #include
go.
Możesz zmienić deklarację jako @R Samuel Klatchko pokazuje. Zwykłym sposobem (jeśli dane nie są const
) jest tak:
W Abc.h:
extern char *xyz;
W Abc.cpp:
char *xyz = "xyz";
Edited by dodać
Należy pamiętać, że osłony nagłówków będą nie rozwiązać ten problem:
Osłony hederów zapobiegają błędom "redefiniowania", w których ten sam symbol pojawia się dwukrotnie w tej samej jednostce kompilacji. To jest błąd kompilatora.
Ale nawet z nagłówka strzeże definicja xyz
nadal będzie pojawiać się w każdym pliku źródłowym, który obejmuje ją, powodując błąd „duplikat symbol”, która jest łącznikiembłąd.
Byłoby bardziej pomocne, gdyby oryginalny plakat wspomniał o tym, oczywiście.
Deklarowanie zmiennej wielokrotnie nie jest błędem (jeśli nie znajduje się w tej samej jednostce tłumaczeniowej). Definiując to. –
Powinienem był to złapać, dzięki. – egrunin
Dzięki za wyjaśnienie strażnika. Oto dziwna rzecz - dostaję tylko błąd linkera dla zduplikowanych symboli, jeśli mam funkcję zdefiniowaną w tym nagłówku. W moim obecnym przypadku mam pęczek stałych i kilka funkcji zdefiniowanych w przestrzeni nazw w nagłówku - dostaję tylko błąd linkera dla funkcji, const są OK. Dlaczego? –