C++ namespace 안에 함수 선언하면 링크시 외부기호 못찾는 오류?
안녕하세요 c만 하다가 덜컥 c++프로젝트를 맡게된 초보입니다.
다름이 아니라 헤더파일에서 네임스페이스 안에 함수를 선언했는데 프로젝트 빌드단계에서 LNK2019 에러가 나네요.
//homealone.cpp 메인함수
#include "stdafx.h"
#include"bond_info.h"
void call_bond();
int _tmain(int argc, _TCHAR* argv[])
{
call_bond();
return 0;
}
//call_bond.cpp 실제 getbond함수가 구현된 파일
#include"bond_info.h"
void call_bond(){
BondLib::bond bnd= BondLib::getbond();
}
BondLib::bond getbond(){
BondLib::bond rst= BondLib::bond(1,1);
return rst;
}
//bond_info.h getbond함수가 선언된 헤더파일
namespace BondLib{
struct bond{
bond(int _a, int _b):a(_a),b(_b){}
int a;
int b;
};
bond getbond(); //네임스페이스 안의 구조체를 결과로 내보내는 함수입니다.
}
오류 메세지는 error LNK2019: "struct BondLib::bond __cdecl BondLib::getbond(void)" (?getbond@BondLib@@YA?AUbond@1@XZ) 외부 기호(참조 위치: "void __cdecl call_bond(void)" (?call_bond@@YAXXZ) 함수)에서 확인하지 못했습니다. call_bond.obj homealone
이렇게 나네요;;
그런데 헤더파일에서 함수를 네임스페이스 밖에 선언하면 또 빌드가 잘 됩니다 ㅠㅠ
아래와 같이 바꾸면용..
namespace BondLib{
struct bond{
bond(int _a, int _b):a(_a),b(_b){}
int a;
int b;
};
}
BondLib::bond getbond();
뭐가 문제인지 가르쳐 주시면 정말 감사드려요.
선언은 네임스페이스 안에다 하시고, 정의를
선언은 네임스페이스 안에다 하시고, 정의를 네임스페이스 바깥에서 하셨네요.
cpp를 다음과 같이 작성하시면 잘 될 것 같습니다.
댓글 달기