1

나는 모든 살아있는 인간이 완벽하게 수행 할 수있는 매우 기본적인 것임을 확신하면서도 어쨌든 그것은 나를 위해 일하지 않습니다. Google을 통해 발견되는 FAQ 및 기타 많은 스레드/질문은이 문제를 해결하지 못했습니다.매우 간단한 클래스 (VS2010)의 해결되지 않은 외부 기호

상황은 다음과 같습니다. Visual Studio 2010 프로젝트가 하나 있습니다. 이 프로젝트는 Visual Studio 2010 솔루션에 있습니다. 이 프로젝트는 다음과 같은 파일이 있습니다

add.h :

class Adder { 
public: 
    static int add(int i1, int i2); 
}; 

add.cpp :

class Adder { 
public: 
    static int add(int i1, int i2) { 
     return i1 + i2; 
    } 
}; 

MAIN.CPP :

#include "add.h" 

int main() { 
    Adder::add(5, 6); 
    return 0; 
} 

이 코드를 실행하기 , 나에게 상당히 기본 보이는, 다음과 같은 링커 오류가 발생합니다 :

main.obj : error LNK2019: unresolved external symbol "public: static int __cdecl Adder::add(int,int)" ([email protected]@@[email protected]) referenced in function _main 

내가 수집 할 수있는 것으로부터 이것은 링커가 Adder :: add()에 대한 구현을 찾을 수 없음을 의미합니다. 그러나 파일은 정확히 같은 프로젝트에 있고 생성 된 .obj 파일은 정확히 같은 폴더에 있으며 클래스 및 헤더 파일의 주제에 대해 읽은 모든 단일 자습서는 이것이 제대로 작동해야 함을 알려줍니다.

나는 지금까지 다음과 같은 잠재적 인 솔루션을 시도했다 :

  • 를 사용하여 별도의를
  • 여러 가지로 통근 식별자를 추가 포함/종속/소스/whatevers 추가로 프로젝트의 자신의 폴더 추가 네임 스페이스
  • 희망
  • 다양한 다른 작은 조정은 작동 할

S o 내 문제는 다음과 같습니다. 링커에서 add.cpp 파일을 인식하도록하려면 어떻게해야합니까? 어떤 도움을 주셔서 감사합니다. 지금은 성공하지 못한 채로 몇 시간을 보냈습니다.하지만 이것은 매우 기본적인 것 같습니다.

답변

2

다음은 완전히 새로운 클래스를 만이 번역 단위 ("add.cpp")을 사용할 수, 헤더에있는 것과 다른

//add.cpp: 
class Adder { 
public: 
    static int add(int i1, int i2) { 
     return i1 + i2; 
    } 
}; 

을 정의합니다.

는 무엇을 포함해야하는 것입니다 :

//add.cpp 
#include "add.h" 
int Adder::add(int i1, int i2) { 
    return i1 + i2; 
} 

이 헤더 add.h에서 클래스에 정의 된 메소드를 구현합니다.

+0

답장을 보내 주셔서 감사합니다. 문제가 해결되었지만 회심 솔루션처럼 보입니다. 클래스를 일반적으로 사용되는 별도의 파일로 분리하는 다른 방법이 있습니까? 아니면 가장 많이 사용되는/편리한 파일입니까? –

+0

@JanJanssen 이것은 ** 클래스를 헤더 및 구현 파일로 분리하는 유일한 방법입니다 **. –

관련 문제