ฉันได้รับข้อผิดพลาดในการพยายามรวบรวมคลาสเทมเพลต C ++ ซึ่งแยกระหว่าง a .hpp
และ.cpp
ไฟล์:
$ 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
และดำเนินการได้