Search

1.8 — Multiple files के साथ programs

जैसे-जैसे programs बड़े होते जाते हैं, उन्हें एक से ज्यादा files में बाँट दिया जाता है ताकि codes अच्छी तरह से व्यवस्थित हों । IDE में काम करने का एक और फायदा ये भी है की वे एक से ज्यादा files के साथ काम करना आसान बना देते हैं । आप पहले से ही जानते हो की single file projects कैसे बनाते हैं । Project में नए files जोड़ना भी बहुत आसान है ।

Visual Studio के project में नए files जोड़ना

Visual Studio 2005 Express में, Solution explorer window के बायीं ओर “Source Files” पर right click कर Add -> New Item select कर ले । ध्यान दें की “C++ File (.cpp)” पहले से select किया हुआ है । File को एक नाम दे, और बस, ये आपके project में add हो गया ।

Note: यदि आप project के Solution Explorer के बजाय file menu से नए files जोड़ते हैं, तो आपका file project में अपने आप add नहीं होगा । आपको ये काम अलग से करना होगा । इसे करने के लिए, Solution Explorer में जाकर “Source Files” पर right click करें, यहाँ Add -> Existing Item चुनकर अपने files select कर ले ।

जब आप अपने program को compile करोगे, आपका नया file अपने आप include हो जायेगा, क्यूंकि अब ये आपके project का हिस्सा है ।

Adding Code::Blocks के projects में files जोड़ना

Code::Blocks में, file menu में जाकर “new file” चुन ले । नए file को एक नाम दे (यहाँ .cpp extension को ना भूलें),और Code::Blocks आपसे पूछेगा की अभी जोड़े गए file को active project, जिसपे आप अभी काम कर रहे हो, में जोड़ना है या नहीं । यहाँ “Yes” पे click करें । ध्यान दे की इसके बाद आपको “Release” और “Debug” checkboxes पे भी click करना होगा, जिससे IDE को पता चल सके की file को दोनों versions में add करना है ।

यदि Code::Blocks आपसे file को project में जोड़ना है या नहीं, ये नहीं पूछ रहा, या फिर project pane में नया file नहीं दिख रहा, तो आपको इसे project में manually जोड़ना होगा । ऐसा करने के लिए, project pane में project के नाम पर right click करें, यहाँ “Add File” को चुन ले, आपने जो file बनाया है उसे locate करें और इसके बाद इसे project में जोड़ ले ।

अब जब आप program को compile करोगे, नया file अपने आप include हो जाना चाहिए क्यूंकि अब ये active project का हिस्सा बन चूका है ।

यदि file Code::Blocks में compile या link नहीं हो रहा, तो एक बार check कर ले की file compile और link होने के लिए set किया गया है या नही । इसके लिए, project pane पर file के नाम पर click करें, और यहाँ से “Properties” चुन ले । अब “General” tab में, आपको कुछ checkboxes नज़र आने चाहिए जो file के compile या link होने को control करते हैं । यदि ये checked नही हैं, तो इनपर click कर इन्हें check कर ले ।

Command line से project में नए files जोड़ना

Command line में, आप अपने favorite editor का इस्तेमाल करते हुए project में नए files जोड़कर इन्हें नाम दे सकते हैं। जब आप अपने program को compile करोगे, आपको बनाये गए सभी नए files को command line पर include करना होगा । उदाहरण के तौर पर: “g++ main.cpp add.cpp -o main”, जहाँ main.cpp और add.cpp आपके code files के नाम हैं, और main, generate किये गए output file का नाम है ।

एक से अधिक files के साथ program

नीचे दिए गए multiple-file program (एक से अधिक file वाला program) पर नज़र डालें:

add.cpp:

main.cpp:

इस program को compile करने की कोशिश करें । आप देखोगे की ये compile नहीं हो रहा, और ये बिलकुल वैसा ही error दे रहा है जैसा की पिछले lesson में functions को गलत क्रम में सजाने से मिला था:

add.cpp(10) : error C3861: 'add': identifier not found
add.cpp(15) : error C2365: 'add' : redefinition; previous definition was 'formerly unknown identifier'

जब compiler किसी code file को compile करता है, इसे दुसरे files में define किये गए functions के बारे में पता नहीं होता । ये खूबी असल में ज़रूरी है ताकि दुसरे file का कोई भी नाम इस file के किसी नाम से match होकर naming collision ना दे बैठे ।

फिर भी, यहाँ पे हम चाहते हैं की main.cpp, add.cpp को खोजकर इसके function add का इस्तेमाल कर सके । main.cpp को add function पर access दिलाने के लिए, हम एक forward declaration का इस्तेमाल कर सकते हैं:

main.cpp, forward declaration के साथ:

अब जब compiler main.cpp को compile करेगा, इसे add() के बारे में पता होगा । इस तरीके का प्रयोग कर, हम files को दुसरे files में रहने वाले functions पर access दिला सकते हैं ।

अब forward declaration के साथ add.cpp और main.cpp को compile करने की कोशिश करें । यदि आपको कोई linker error मिलता है, तो एक बार check कर ले की आपने add.cpp को अपने project या compile line में सही तरीके से जोड़ा है या नहीं ।

कुछ गलत हो रहा है!

पहली बार multiple-files का इस्तेमाल करते वक़्त आपसे गलतियाँ हो सकती है । यदि आपने ऊपर का तरीका अपनाया और आपको कोई error मिला है, तो इन सभी चीजों को check कर ले:

1. यदि आपको add() के main() में ना define होने का compiler error मिला है, तो शायद आप add() को forward declare करना भूल गये हो ।

2. यदि आपको कुछ इस तरह से add() के define न होने का linker error मिलता है,

unresolved external symbol "int __cdecl add(int,int)" (?add@@YAHHH@Z) referenced in function _main

2a. …तो इसका सबसे ज्यादा संभावित कारण है की add.cpp को आपने project में सही तरीके से नही जोड़ा है । यदि आप Visual Studio या फिर Code::Blocks का इस्तेमाल कर रहे हो, तो आपको IDE की बायीं ओर Solution Explorer/project pane में add.cpp नज़र आना चाहिए । यदि ऐसा नहीं है, तो project पर right click कीजिये, अपने file को फिर से add कीजिये और दोबारा compile कीजिये । यदि आप command line पर compile कर रहे हो, तो main.cpp और add.cpp, दोनों files को compile command में जोडना ना भूले ।

2b. …ये भी हो सकता है की आपने add.cpp को गलत project में जोड़ लिया है ।

2c. …ये भी संभव है की file compile या link होने के लिए set नहीं किया गया है । File properties को एक बार check कर ले और देखे की file compile/link होने के लिए अच्छी तरह से set किया गया है । Code::Blocks में, compile और link दो अलग checkboxes है जिनमे दोनों checked होने चाहिए । Visual Studio में, “exclude from build” का एक option होगा जो no पे set होना चाहिए या blank होना चाहिए ।

3. यदि आप precompiled headers के साथ Visual Studio का प्रयोग कर रहे हैं, तो सभी code files में #include “stdafx.h” होना चाहिए । ये main.cpp और add.cpp दोनों को include करता है ।

4. add.cpp को main.cpp से #include बिलकुल ना करें । ऐसा करने से compiler add.cpp को अलग file समझने के बजाय दोनों को एक ही file की तरह treat करेगा । हो सकता है की इस छोटे से program में ये तरीका काम कर जाये, पर आगे चलकर ये आपके लिए मुश्किलें पैदा कर सकता है ।

निष्कर्ष

Object-oriented programming section में पहुँचते ही हम multiple-files का इस्तेमाल करना शुरू कर देंगे, तो यही सबसे अच्छा समय है की आप multiple files को project में जोड़ना बिलकुल अच्छी तरह से समझ ले, अन्यथा आपको आगे दिक्कत हो सकती है ।

फिर से याद दिलाने के लिए: जब भी आप कोई नया code (.cpp) file बनाते हो, आपको इसे आपके project में जोड़ना होगा ताकि ये compile हो सके ।

1.9 -- Header files
Index
1.7 -- Forward declarations

Leave a Comment

Put C++ code inside [code][/code] tags to use the syntax highlighter