문제

하게 사용할 수 있는 인라인 회원수의 특정 클래스입니다.예를 들어 기능을 선언하고 구현하지 않고 인라인은 같은:

헤더에 파일:

int GetTplLSize();

니다.cpp file:

int NeedleUSsim::GetTplLSize()
{
    return sampleDim[1];
}

몇 가지 이유가 있는"inline"키워드 중 하나에 한개의 구현 및 선언뿐만 아니라,모두에서,나를 얻을 링커에 오류와 같:

 Creating library C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.x and object C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.exp 
mexfunction.obj : error LNK2019: unresolved external symbol "public: int __thiscall NeedleUSsim::GetTplLSize(void)" (?GetTplLSize@NeedleUSsim@@QAEHXZ) referenced in function _mexFunction 
mexfunction.mexw32 : fatal error LNK1120: 1 unresolved externals 

  C:\PROGRA~1\MATLAB\R2008B\BIN\MEX.PL: Error: Link of 'mexfunction.mexw32' failed. 

무엇을 해야에서의 제거하기 위해 이러(i.e나는 무엇을 잘못하고의 관점에서 이러한 인라인 회원 기능)?

도움이 되었습니까?

해결책

그런 다음 기능 정의를 헤더에 넣어야합니다. 컴파일러를 인라인으로 힌트하는 가장 간단한 방법은 클래스 선언에 다음과 같은 방법 본문을 포함시키는 것입니다.


class NeedleUSsim
{
  // ...
  int GetTplLSize() const { return sampleDim[1]; }
  // ...
};

또는 별도의 선언 및 정의를 고집하는 경우 :


class NeedleUSsim
{
  // ...
  int GetTplLSize() const;
  // ...
};

inline int NeedleUSsim::GetTplLSize() const
{ return sampleDim[1]; }

해당 방법을 사용하는 각 번역 장치에서 정의가 표시되어야합니다.

다른 팁

C ++ FAQ 라이트에서

인라인 함수의 정의를 .CPP 파일에 넣고 다른 .CPP 파일에서 호출되면 링커에서 "미해화되지 않은 외부"오류가 나타납니다.

컴파일러에 멤버 기능을 인라인으로 만드는 방법은 무엇입니까?

다른 사람들이 이미 지적했듯이, 당신은 다음과 같이 상감 된 함수의 정의를 헤더 파일로 이동해야합니다.

class NeedleUSsim
{
  // ...
  inline int GetTplLSize() { return sampleDim[1]; }
  // ...
};

그 이유는 컴파일러가 인화 된 함수를 호출 할 때 어떤 코드를 인라인으로 알아야하는지 알아야하기 때문입니다. BelessusSim 클래스의 .CPP 파일에 함수의 정의를 남겨두면 컴파일러가 생성하는 코드가 니들러스 객체 파일에 갇히게됩니다. 컴파일러는 소스 코드 만 읽으므로 다른 클래스의 객체 파일을 살펴볼 수는 없습니다. 다른 .CPP 파일을 컴파일 할 때 호출을 대체 할 코드를 알 수있는 방법이 없습니다.

인라인 함수가있는 경우 정의를 헤더 파일에 넣어야합니다.

인라인드의 관용구 매크로.이것은 적어도 할 수 있는 별도,이기는 하지만,약간의 코드 선언입니다.그것은 또한 당신이 할 수 있습을 토글 인라인의 기능을 통해 define.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top