.hpp
와 .cpp
파일 사이에 분할 된 C ++ 템플릿 클래스를 컴파일하려고하면 오류가 발생 합니다.
$ g++ -c -o main.o main.cpp
$ g++ -c -o stack.o stack.cpp
$ g++ -o main main.o stack.o
main.o: In function `main':
main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()'
main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()'
collect2: ld returned 1 exit status
make: *** [program] Error 1
내 코드는 다음과 같습니다.
stack.hpp :
#ifndef _STACK_HPP
#define _STACK_HPP
template <typename Type>
class stack {
public:
stack();
~stack();
};
#endif
stack.cpp :
#include <iostream>
#include "stack.hpp"
template <typename Type> stack<Type>::stack() {
std::cerr << "Hello, stack " << this << "!" << std::endl;
}
template <typename Type> stack<Type>::~stack() {
std::cerr << "Goodbye, stack " << this << "." << std::endl;
}
main.cpp :
#include "stack.hpp"
int main() {
stack<int> s;
return 0;
}
ld
물론 정확합니다. 기호가 stack.o
.
에 대한 대답 이 질문은 이 말한대로 내가 이미하고 있어요로서, 도움이되지 않습니다.
이 방법 이 도움 이 될 수 있지만 모든 단일 방법을 .hpp
파일 로 옮기고 싶지는 않습니다. 그럴 필요 는 없습니까?
.cpp
파일의 모든 항목을 파일 로 이동 .hpp
하고 독립 실행 형 개체 파일로 링크하지 않고 모든 항목을 포함 하는 유일한 솔루션 입니까? 즉 보인다 지독하게 못생긴! 이 경우 이전 상태로 되돌리고 이름 stack.cpp
을 바꾸고 stack.hpp
끝낼 수 있습니다.