2017-05-24 1 views
-1
Error 2 error LNK2005: "void __cdecl strCpy(char * &,char * &)" 

([email protected]@[email protected]) already defined in Car.obj 

C:\Users\l1s15bscs0071\Documents\Visual Studio 

2013\Projects\Lab11_task1\Lab11_task1\Honda.obj Lab11_task1 
이 프로젝트는이 링크에서 찾을 수 있습니다

: https://drive.google.com/open?id=0Bw2cO-zFzAvsR1lIdURmbVJMaTA이 오류의 의미를 알아낼 수 없습니다

+0

머리가 누락 된 것 같습니다. 어쨌든 strCpy를 여러 객체 파일에 넣었다는 의미의 가드를 포함합니다. – donkopotamus

+0

@donkopotamus 헤더 가드가 방지하지 못해 인라인 함수 또는 별도의 정의가됩니다. – Quentin

답변

0

문제 : 헤더의 비 정적 글로벌 네임 스페이스의 함수 정의

문제는 당신이 정의하는 것입니다 strCpy를 헤더에 포함하고 Honda.obj 및 Car.obj에 한 번 여러 번 포함 시키십시오. 두 .cpp 파일에 str.h를 포함 시키십시오.

함수는 정적으로 선언되지 않으므로 한 번 인스턴스화되지 않고 .OBJ 각각에 str.h가 포함될 때마다 링커에서 strCpy()에 대한 여러 정의가 적용됩니다.

해결 방법 1 : 마크 strcpy를 정적

#include<cstring> 

static void strCpy(char *& Source, char *& Dest) 
{ 
    for (int i = 0; i < strlen(Source); i++) 
    { 
     Dest[i] = Source[i]; 
    } 

    Dest[strlen(Source)] = '\0'; 
} 

해결 방법 2 : 두 경우 모두 .H 및 .CPP 파일에서 별도의 선언과 정의

// str.h 
# pragma once 

void strCpy(char *& Source, char *& Dest); 

// str.cpp 
#include "str.h" 

void strCpy(char *& Source, char *& Dest) 
{ 
    for (int i = 0; i < strlen(Source); i++) 
    { 
     Dest[i] = Source[i]; 
    } 

    Dest[strlen(Source)] = '\0'; 
} 

:

#pragma once 또는 추가 비 VS 포함 포함 #ifndef <key> #define <key> // code #endif // <key>

관련 문제