2011-10-20 22 views
12

Próbuję skompilować stary projekt CpP MFC w Visual Studio 2010 pro.błąd C2733 sekund C połączenie przeciążonej funkcji "funkcja" niedozwolona

Wykorzystuje DLL, który jest skompilowany z użyciem LabVIEW i dodaję tę informację, ponieważ nie wiem, co jest przyczyną komunikatu o błędzie ..

komunikaty o błędach pojawiają się na wielu funkcji, wszystkie tego samego rodzaju błędu .

error C2733: second C linkage of overloaded function 'function name' not allowed. 

'nazwę funkcja' obejmuje: 'StrCatW', 'StrCmpNW', 'StrCmpW', 'StrCpyNW' i 'StrCpyW'

znalazłem similar case w internecie.

Mimo że sugestia pod linkiem nie rozwiąże problemu w moim przypadku i nadal widzę te same komunikaty o błędach.

Z góry dziękuję wszystkim, którzy próbują pomóc.

+1

Wygląda jak funkcje "StrCatW", "StrCmpNW" itp. Są połączone więcej niż jeden raz lub są zawarte w więcej niż jednym pliku * bez deklaracji * jako "wstawiany". –

+1

@ThomasMatthews Błąd nie oznacza, że ​​istnieje więcej niż jedna definicja tej samej funkcji, ale raczej, że istnieje więcej niż jedno przeciążenie o tej samej nazwie. Problem w tym przypadku polega na tym, że z powodu powiązania C, wymazywanie nazw jest wyłączone i nie można mieć symboli o dokładnie takiej samej nazwie, odnoszących się do różnych funkcji. –

Odpowiedz

14

Nie mam żadnego doświadczenia z MFC, w każdym razie spróbuję odpowiedzieć. Ten komunikat o błędzie pojawia się, gdy deklarowana jest funkcja extern "C" przy innym zestawie parametrów. Na przykład:

extern "C" int myfunc(int); 
extern "C" int myfunc(char); 

W przypadku, gdy dwie deklaracje są prawdopodobnie związane char*:

extern "C" char* StrCatW(char*, char*); 
extern "C" wchar_t* StrCatW(wchar_t*, wchar_t*); 

Spróbuj wyłączyć obsługę Unicode w roztworze: myślę, jeśli biblioteka DLL jest bardzo stary, to w jakiś sposób deklaruje argumenty w postaci StrCatW, sprzeczne z inną deklaracją.

Jeśli to nie pomoże, włącz wyjście przetworzonych (przełącznik /E kompilatora, o ile dobrze pamiętam) - będzie wyjściowej bardzo duży plik, więc szukać StrCatW w nim, może to daje pewną wskazówkę na co się dzieje.

+0

dzięki za sugestie .. Wyłączyłem obsługę Unicode i nie działałem, więc wypróbuję przetworzone dane wyjściowe i zobaczę, co się dzieje –

+0

Cześć Gdy włączam preproces (/ P w VS 2010), widzę błąd LINK pytając o stdafx.obj, który jest plikiem obj pierwszego cpp na mojej liście plików źródłowych. Znalazłem wyjaśnienie błędu MSDN, które wydaje się być związane z tym, co sugerujesz .. http://msdn.microsoft.com/en-us/library/5z9es6ec(v=vs.71).aspx –

+0

Rozwiązałem problem po prostu komentując plik nagłówkowy funkcje na liście błędów "drugi C linkage" –

Powiązane problemy