[C++] Użycie funkcji z innego pliku w WinApi
Ostatnio zmodyfikowano 2012-11-13 15:59
hit Temat założony przez niniejszego użytkownika |
[C++] Użycie funkcji z innego pliku w WinApi » 2012-11-13 11:29:17 Witam, piszę program w Visualu studio 2010, używając WinApi. Natknąłem się na problem używania tych samych zmiennych w kilku plikach, jednak znalazłem rozwiązanie tego za pomocą 'extern'. Jednak pisząc dalej, chciałem stworzyć funkcje w innych plikach, żeby było bardziej przejrzyście, ale natknąłem się na taki błąd: error LNK2005: "int __cdecl funkcja(void)" (?funkcja@@YAHXZ) already defined in plik1.obj z czego wynika, że funkcja już jest zdefiniowana ale nic takiego nie miało miejsca. W kodzie wygląda to tak, że w osobnym pliku mam przykładową funkcję: int funkcja() { return 5; } a w pliku z główną funkcją zwykłe jej wywołanie funkcja(); Gdzie popełniam błąd? Edit: Kiedy deklaruję zmienną w pliku głównym i z pomocą 'extern' używam jej w innym pliku to jest ok, natomiast w drugą stronę tzn. deklaracja zmiennej w pliku pobocznym i użycie w głównym też pokazuje taki błąd 'already defined...'. |
|
pekfos |
» 2012-11-13 12:54:09 Najpierw prawidłowe pojęcia: extern int zmienna; int zmienna ;
Definicja jest jedna, deklaracji może być wiele. void fun();
void fun() { } error LNK2005: "int __cdecl funkcja(void)" (?funkcja@@YAHXZ) already defined in plik1.obj
Ten błąd mówi, że masz więcej niż jedną definicję funkcji. Może umieściłeś definicje w pliku nagłówkowym? |
|
hit Temat założony przez niniejszego użytkownika |
» 2012-11-13 13:07:11 No właśnie nie umieściłem i jakkolwiek bym swojej funkcji nie nazwał to pojawia się taki sam błąd. Próbowałem teraz deklarować jakąkolwiek funkcję w pliku głównym, a zdefiniować ją w pobocznym, co zresztą jest moim celem, ale nadal wyskakuje ten błąd. Czy są może konkretnie określone miejsca gdzie należy zadeklarować nazwy funkcji, żeby działały poprawnie w kilku plikach? Edit: Ok, zainteresowałem się już artykułem o dzieleniu programu na moduły, jakby mi to nie pomogło to wtedy napiszę ponownie. Dzięki pekfos! Edit2: Niestety.. Zrobiłem, zgodnie z artykułem z tego portalu plik nagłówkowy, w którym zamieściłem deklaracje funkcji, oraz plik *.cpp w którym ją zdefiniowałem i pokazuje taki sam błąd: error LNK2005: "int __cdecl funkcja(void)" (?funkcja@@YAHXZ) already defined in plik1.obj |
|
pekfos |
» 2012-11-13 13:50:20 No to pokaż kod :] |
|
hit Temat założony przez niniejszego użytkownika |
» 2012-11-13 14:14:56 Zrobiłem już tak, że w pliku głównym WinApi.cpp mam tak: #include "stdafx.h" #include <iostream> #include <process.h> #include <windows.h> #include "fun.h" w pliku fun.h : #ifndef fun_h #define fun_h #include "stdafx.h"
int funkcja( int z );
#endif oraz fun.cpp #include "stdafx.h" #include "fun.h" #include "WinApi.h"
int funkcja( int a ) { return a + 3; } Oczywiście ta prymitywna funkcja służy tylko do sprawdzenia poprawności kompilacji. I teraz już działa ( wcześniej załączałem też drugi fun.cpp w WinApi.cpp ). Zatem chciałem tylko jeszcze zapytać odnośnie zmiennych. Jeżeli mam zdefiniowaną jakąś zmienną w pliku WinApi.cpp, to w każdym innym pliku którym ją używam muszę mieć osobną deklarację? |
|
pekfos |
» 2012-11-13 15:59:41 Deklaracja może być w pliku nagłówkowym. |
|
« 1 » |