আমি একটি সি ++ টেম্পলেট শ্রেণি সংকলন করতে গিয়ে ত্রুটি পাচ্ছি যা একটি .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
এটি করা হয়ে যেতে পারে।