मुझे C ++ टेम्पलेट क्लास को संकलित करने की कोशिश करने में त्रुटि हो रही है जो कि एक .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
यहाँ मेरा कोड है:
स्टैक.हप्प :
#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
और इसके साथ किया जाए।