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