"정의되지 않은 참조"오류에 약간의 문제가 있습니다. 내가 코드를 게시 할 수 없습니다 만, 다음과 같이 선언하고 난 함수를 호출하고있는 방법은 다음과 같습니다C++ 템플릿 함수 인스턴스화
선언 :
template <typename T>
int pitch_detect(deque<T>& x, int offset, int len);
template <typename T>
int is_voiced(
deque<T>& x, int offset, int len,
double avg_energy, int pre_voice,
short& s_flag,
long nsamples
);
다음과 같이 내가 위의 함수를 호출하고 있습니다 :
x = is_voiced(superFrame_, cur_offset_, f_len_,
avgEnergy_, frame_voicing_[1], silence_flag_, nsamples_);
y = pitch_detect(superFrame_, cur_offset_, f_len_);
위의 문장 (함수를 호출하는 곳)은 오류로 표시됩니다. 이들은 메시지입니다 :
정의되지 않은 INT is_voiced`참조 (표준 : 양단 큐> &, INT, INT, 더블, INT, 짧은 & 긴)
정의되지 않은 참조에` 을 int로 pitch_detect (std :: deque> &, int, int) '
위의 오류를 디코딩 할 때 어떤 도움이 필요합니다. 감사합니다, Sriram
편집 : 위의 기능은 별도의 헤더와 해당 C++ 파일에 정의되어 있습니다. 내가 그들을 컴파일하고 객체 파일을 만들려고 할 때 아무런 문제가 없다. 이러한 오류는 링커 단계에서 볼 수 있습니다.
아! 예. 그것이 문제였습니다. 템플릿을 명시 적으로 인스턴스화하지 않았습니다. 나는 템플릿에 익숙하지 않으며 배울 것이 많습니다. 문제 해결됨! David 감사합니다! – Sriram
명시 적 인스턴스화를 실제로 사용해야합니까? 대부분의 경우 헤더에 템플릿 정의를 제공하고 컴파일러에서 사용시 암시 적으로 인스턴스화하는 것이 좋습니다. –