আপনি উল্লিখিত হিসাবে আপনি ফাইল অন্তর্ভুক্ত করতে পারেন.cpp
, এটি একটি খারাপ ধারণা।
যেমনটি আপনি উল্লেখ করেছেন, ঘোষণাগুলি শিরোনাম ফাইলগুলির অন্তর্ভুক্ত। একাধিক সংকলন ইউনিটে অন্তর্ভুক্ত করা হলে এগুলির কোনও সমস্যা হয় না কারণ তারা বাস্তবায়ন অন্তর্ভুক্ত করে না। ফাংশন বা শ্রেণীর সদস্যের সংজ্ঞা একাধিকবার অন্তর্ভুক্ত করা সাধারণত একটি সমস্যা তৈরি করে (তবে সর্বদা নয়) কারণ লিঙ্কার বিভ্রান্ত হয়ে পড়বে এবং ত্রুটি ছুঁড়ে দেবে।
প্রতিটি .cpp
ফাইলের মধ্যে যা হওয়া উচিত তা হ'ল প্রোগ্রামের সাবসেটের সংজ্ঞা যেমন যেমন একটি শ্রেণি, যৌক্তিকভাবে ফাংশনগুলির সংগঠিত গোষ্ঠী, গ্লোবাল স্ট্যাটিক ভেরিয়েবল (কিছুটা হলেও অল্প ব্যবহার করুন) ইত্যাদি includes
প্রতিটি সংকলন ইউনিট ( .cpp
ফাইল) এর মধ্যে এর সংজ্ঞা সংকলন সংকলনের জন্য যা প্রয়োজন তা ঘোষণা অন্তর্ভুক্ত করে। এটি যে ক্রিয়াকলাপগুলি এবং ক্লাসগুলির উল্লেখ করে তা ট্র্যাক করে রাখে তবে এতে থাকে না, সুতরাং লিঙ্কারটি পরে এটি সমাধান করতে পারে যখন এটি কোনও এক্সিকিউটেবল বা লাইব্রেরির সাথে অবজেক্ট কোডটি একত্রিত করে।
উদাহরণ
Foo.h
-> ক্লাস ফু এর জন্য ঘোষণা (ইন্টারফেস) রয়েছে।
Foo.cpp
-> ক্লাস ফু এর সংজ্ঞা (বাস্তবায়ন) ধারণ করে।
Main.cpp
-> প্রধান পদ্ধতি, প্রোগ্রাম এন্ট্রি পয়েন্ট থাকে। এই কোডটি একটি ফু ইনস্ট্যান্টিয়েট করে এবং এটি ব্যবহার করে।
উভয় Foo.cpp
এবং Main.cpp
অন্তর্ভুক্ত করা প্রয়োজন Foo.h
। Foo.cpp
এটির প্রয়োজন কারণ এটি শ্রেণি ইন্টারফেসকে সমর্থন করে এমন কোডটি সংজ্ঞায়িত করছে, সুতরাং সেই ইন্টারফেসটি কী তা তা জানতে হবে। Main.cpp
এটির প্রয়োজন কারণ এটি একটি ফু তৈরি করছে এবং তার আচরণকে আহ্বান করছে, সুতরাং সেই আচরণটি কী তা জানতে হবে, স্মৃতিতে একটি ফু এর আকার এবং এর কার্যকারিতা কীভাবে খুঁজে পাওয়া যায় ইত্যাদি but তবে এটি এখনও বাস্তব বাস্তবায়নের প্রয়োজন নেই।
সংকলকটি উত্পন্ন করবে যা Foo.o
থেকে Foo.cpp
সংকলিত আকারে সমস্ত ফু ক্লাস কোড রয়েছে। এটি উত্পন্ন করে Main.o
যার মধ্যে মূল পদ্ধতি এবং ক্লাস ফু-র অবিলম্বে উল্লেখগুলি অন্তর্ভুক্ত রয়েছে।
এখন লিঙ্কারটি আসে, যা দুটি অবজেক্ট ফাইল Foo.o
এবং Main.o
একটি এক্সিকিউটেবল ফাইলের সাথে সংযুক্ত করে। এটি অমীমাংসিত ফু এর রেফারেন্সগুলিকে Main.o
দেখে কিন্তু Foo.o
এটিতে প্রয়োজনীয় চিহ্নগুলি রয়েছে এটি দেখে তাই এটি কথা বলতে "বিন্দুগুলিকে সংযুক্ত করে"। একটি ফাংশন কল Main.o
এখন সংকলিত কোডের আসল অবস্থানের সাথে সংযুক্ত আছে তাই রানটাইম সময় প্রোগ্রামটি সঠিক স্থানে যেতে পারে।
আপনি যদি Foo.cpp
ফাইলটি অন্তর্ভুক্ত করে থাকেন Main.cpp
তবে ফু ফু ক্লাসের দুটি সংজ্ঞা থাকবে। লিঙ্কারটি এটি দেখবে এবং বলবে "কোনটি বেছে নেবে তা আমি জানি না, সুতরাং এটি একটি ত্রুটি।" সংকলন পদক্ষেপটি সফল হবে, তবে লিঙ্কিং হবে না। (যদি না আপনি কেবল সংকলন করেন Foo.cpp
তবে তবে কেন এটি আলাদা .cpp
ফাইলে রয়েছে?)
অবশেষে, বিভিন্ন ফাইল ধরণের ধারণাটি কোনও সি / সি ++ সংকলকটির সাথে অপ্রাসঙ্গিক। এটি "পাঠ্য ফাইলগুলি" সংকলন করে যা প্রত্যাশিতভাবে পছন্দসই ভাষার জন্য বৈধ কোড রয়েছে। কখনও কখনও এটি ফাইল এক্সটেনশনের ভিত্তিতে ভাষা বলতে সক্ষম হতে পারে। উদাহরণস্বরূপ, .c
কোনও সংকলক বিকল্প নেই এমন একটি ফাইল সংকলন করুন এবং এটি সি ধরে নেবে , যখন একটি .cc
বা .cpp
এক্সটেনশান এটি সি ++ ধরে নিতে বলে। যাইহোক, আমি সহজেই একটি সংকলককে একটি .h
বা এমনকি .docx
ফাইল সি ++ হিসাবে সংকলন করতে বলতে পারি এবং এটি যদি কোনও .o
সরল পাঠ্য বিন্যাসে বৈধ সি ++ কোড থাকে তবে এটি একটি অবজেক্ট ( ) ফাইল নির্গত করবে । এই এক্সটেনশনগুলি প্রোগ্রামারের সুবিধার জন্য আরও বেশি। যদি আমি দেখি Foo.h
এবং Foo.cpp
, আমি অবিলম্বে অনুমান করি যে প্রথমটিতে শ্রেণির ঘোষণা রয়েছে এবং দ্বিতীয়টিতে সংজ্ঞা রয়েছে।