आप सी ++ में कक्षा का उदाहरण कैसे बनाते हैं

मैं एक सी ++ शुरुआत कर रहा हूँ। मेरे पास एक वर्ग है और जब मैं इसे संकलित करने का प्रयास करता हूं तो कहता है कि यह 'मुख्य' गायब है।

इस वर्ग का उदाहरण बनाने और इसके तरीकों तक पहुंचने के लिए मुझे क्या करने की ज़रूरत है?

#include 
#include 

using namespace std;

class Account
{
      string name;
      double balance;

  public:
      Account(string n);
      Account(string n, double initial_balance);

      string get_name() const;
      double get_balance() const;

      void deposit(double amount);

      void widthdraw(double amount);

};

संपादित:

मैं मुख्य विधि कहां रखूं?

मैंने इसे निम्न की तरह एक अलग फ़ाइल में डालने की कोशिश की है

    #include 
    int main(){
    Account:: Account(string n) : name(n), balance(0){}
    return 0 ;
    }

लेकिन यह एक त्रुटि देता है कि निर्देशिका में खाता नहीं है। मुझे अनुमान है कि यह संकलित नहीं है

संपादित:

दोनों फाइलें एक ही निर्देशिका में हैं

account_main.cc

    #include
    #include 
    #include "Account.cc"

    Account:: Account(string n) : name(n), balance(0){} 
    int main()
    {
        Account account("Account Name");//A variable called "account"
        account.deposit(100.00);//Calls the deposit() function on account

        return 0 ;
    }

Account.cc

#include
#include 

using namespace std;

class Account
{
      string name;
      double balance;

  public:
      Account(string n);
      Account(string n, double initial_balance);

      string get_name() const;
      double get_balance() const;

      void deposit(double amount);

      void widthdraw(double amount);

};
0
क्या आप कक्षा की रचनाकार को मुख्य परिभाषा में परिभाषित कर रहे हैं? असल में, यहां तक ​​कि अगर यह होमवर्क भी है, तो एक अच्छी सी ++ किताब प्राप्त करें और बहुत ही बुनियादी मौलिक सिद्धांतों पर काम करें।
जोड़ा लेखक Christian Rau, स्रोत
अगर यह होमवर्क है तो क्या आपके पास कोई पुस्तक नहीं है जिसे आप पढ़ रहे हैं? मुझे पूरा यकीन है कि इसमें कुछ मौलिक कुछ शामिल होना चाहिए।
जोड़ा लेखक ildjarn, स्रोत
main सी ++ में।
जोड़ा लेखक wkl, स्रोत
तुम क्या सीख रहे हो मुझे लगता है कि आपको यहां सूचीबद्ध एक या अधिक पुस्तकों की आवश्यकता है: stackoverflow.com/q/388242/10077
जोड़ा लेखक Fred Larson, स्रोत

3 उत्तर

सभी सी ++ प्रोग्रामों को एंट्री पॉइंट कहा जाता है। मुख्य() फ़ंक्शन हमेशा मानक C ++ प्रोग्राम के लिए प्रविष्टि बिंदु होता है। आपको एक मुख्य() प्रदान करना होगा, अन्यथा लिंकर शिकायत करेगा। आप दो तरीकों से एक मुख्य() फ़ंक्शन लिख सकते हैं:

int main()
{
    return 0;
}

या, यदि आप कमांड लाइन तर्क की अपेक्षा कर रहे हैं:

int main(int argc, char ** argv)
{
    return 0;
}

ध्यान दें कि शून्य मुख्य() C ++ में मान्य नहीं है है। यह भी ध्यान रखें कि return कथन main() फ़ंक्शंस के लिए कड़ाई से जरूरी नहीं है, लेकिन स्थिरता के लिए आपको स्पष्ट रूप से एक लिखना चाहिए।

सी ++ मानक 3.6.1 मुख्य कार्य [basic.start.main]

     

5। मुख्य में एक रिटर्न स्टेटमेंट का मुख्य कार्य छोड़ने का प्रभाव होता है (स्वचालित संग्रहण अवधि के साथ किसी ऑब्जेक्ट को नष्ट करना) और   तर्क के रूप में वापसी मूल्य के साथ बाहर निकलना कॉलिंग। अगर नियंत्रण पहुंचता है   रिटर्न स्टेटमेंट का सामना किए बिना मुख्य का अंत, प्रभाव है   निष्पादित करने का

  वापसी 0;
 

अपने नवीनतम संपादन के बारे में अपने प्रश्न का उत्तर देने के लिए:

#include 

int main(){ 
    Account:: Account(string n) : name(n), balance(0){} 
    return 0 ; 
} 

main() का रूप सही है, लेकिन यह नहीं है कि आप कक्षा सदस्य परिभाषा कैसे प्रदान करते हैं। निर्माता को मुख्य समारोह के बाहर होना चाहिए।

#include 

// Outside of main()
Account::Account(string n) : name(n), balance(0)
{
} 

int main()
{ 
     return 0 ; 
} 

खाता का उदाहरण बनाने के लिए, आप एक चर घोषित करते हैं और इस तरह के सभी आवश्यक कन्स्ट्रक्टर तर्कों को पास करते हैं:

int main()
{
    Account account("Account Name");//A variable called "account"
    account.deposit(100.00);//Calls the deposit() function on account
                            //Make sure you provide a function
                            //definition for Account::deposit().
    return 0;
}

Also, check the exact file path of where class Account is. If the Account class is in a file called Account.h and is in the same folder as the file containing the main() function, then you need to use #include "Account.h" instead of #include in that file. For example:

#include "Account.h"//Note .h and quotes

Account::Account(string n) : name(n), balance(0)
{
} 

int main()
{
   //...
    return 0;
}

यह वास्तव में सी ++ प्रोग्रामिंग भाषा का एक मौलिक पहलू है। निश्चित रूप से आपके पास एक पुस्तक है जो इसे कवर करती है? वास्तव में, मुख्य() फ़ंक्शंस और # शामिल कथन आमतौर पर पहली बात होती है जिसे आप सी ++ में प्रोग्रामिंग करते समय सीखते हैं। मैं अत्यधिक अनुशंसा करता हूं कि आप एक अच्छी सी ++ पुस्तक उठाएं और पढ़ें उन्हें और अभ्यास करते हैं।

6
जोड़ा
उसके लिए धन्यवाद। मैंने मूल पोस्ट में जोड़ा है कृपया एक नज़र डालें।
जोड़ा लेखक code511788465541441, स्रोत
मेरे पास main_account.cc में मुख्य विधि है, यह account.cc के समान फ़ोल्डर में है। जब मैं main_account.cc को संकलित करने का प्रयास करता हूं तो यह कहता है कि निर्देशिका निर्देशिका में नहीं मिल सकती है। मैंने # खाता और # शामिल <�खाता> शामिल किया है लेकिन यह काम नहीं करता है। उस निर्देशिका में खाता का कोई निष्पादन योग्य नहीं है और मैं इसे नहीं बना सकता क्योंकि जब मैं खाता संकलित करने का प्रयास करता हूं तो यह कोई मुख्य विधि नहीं कहता है
जोड़ा लेखक code511788465541441, स्रोत
मैंने मूल संदेश में दोनों फ़ाइलों की सामग्री को जोड़ा है, यदि आप कर सकते हैं तो एक निश्चित संस्करण देखें और पोस्ट करें। धन्यवाद
जोड़ा लेखक code511788465541441, स्रोत
ठीक है मैंने ऐसा किया और जब मैं main_account.cc संकलित करता हूं तो यह कहता है "main_account.cc:(.text+0x92):` खाता :: जमा (डबल) 'के लिए अनिर्धारित संदर्भ
जोड़ा लेखक code511788465541441, स्रोत
यह काम कर रहा है धन्यवाद बहुत बहुत सराहना की
जोड़ा लेखक code511788465541441, स्रोत
@ user521180: Account.cc का नाम खाता.h पर बदलें और # शामिल करें "खाता.h" Account_main.cc
जोड़ा लेखक In silico, स्रोत
@ user521180: क्लास खाता में कौन सी फ़ाइल स्थित है? क्या इसे Account.h कहा जाता है? क्योंकि आपको विवरण शामिल करने में फ़ाइल एक्सटेंशन को भी निर्दिष्ट करने की आवश्यकता है। साथ ही, जब आप किसी फ़ाइल को संकलित करते हैं तो आप स्रोत फ़ाइल में फ़ाइल पथ पास करते हैं, हेडर फ़ाइल i.e. main_account.cc नहीं, खाता नहीं।
जोड़ा लेखक In silico, स्रोत
@ टायलर फेरारो: हाँ। मेरा नवीनतम संपादन देखें।
जोड़ा लेखक In silico, स्रोत
क्या यह वैध है? यह कुछ भी वापस नहीं कर रहा है ...
जोड़ा लेखक Genzume, स्रोत

For your latest edit: not Account in the directory

इसे इस्तेमाल करे:

#include "Account.h"  //quotes, and .h


Account:: Account(string n)  //this must be outside of main, it's its own function
: name(n), balance(0) //I put these on three seperate lines but
{}                    //that's a personal choice

int main(){  //this is what the code should do when it starts
    Account person1("George"); //create a Account called person1 with the name George
    cout << person1.get_name(); //c-output person1's name.
    return 0 ; //return success (success=0)
}
1
जोड़ा
# शामिल "खाता.सीसी" काम किया। मुख्य विधि वाला वर्ग संकलित कर रहा है लेकिन Account.cc संकलित नहीं हुआ है अभी तक सामान्य है?
जोड़ा लेखक code511788465541441, स्रोत
जो कुछ भी आपके कंपाइलर का उपयोग करने के लिए आपको सिखाने के लिए किसी को (व्यक्तिगत रूप से) ढूंढें। आपके पास बहुत सारे कदम और अवधारणाएं हैं जिन्हें आप याद कर रहे हैं।
जोड़ा लेखक Mooing Duck, स्रोत
जब आप एक फ़ाइल # शामिल करते हैं, तो यह मूल रूप से उस फ़ाइल को प्रतिलिपि बनाता है जो उस फ़ाइल को चालू करता है, इसलिए उस फ़ाइल में सामान वास्तव में संकलित हो रहा है। आप क्यों कहते हैं कि यह संकलन नहीं कर रहा है?
जोड़ा लेखक Mooing Duck, स्रोत
# शामिल मूल रूप से नामित फ़ाइल की सामग्री को निर्देश शामिल करने के स्थान पर चिपकाता है। तो #include "Account.cc" खाता.सीसी की सामग्री main_account.cc के हिस्से के रूप में संकलित की गई है। आम तौर पर इसे इस तरह की .cc फ़ाइलों को शामिल करने के लिए खराब अभ्यास माना जाता है। इसके बजाय आपको '.h' हेडर फ़ाइल का उपयोग करना चाहिए और यह पता लगाना चाहिए कि एक हेडर बनाम क्या होता है। Acc फ़ाइल में क्या होता है। आपके मामले में आपको बस # शामिल और नामस्थान std का उपयोग करके; , std :: के सही उदाहरण जोड़ें, और उसके बाद account.hcc को account.h का नाम बदलें।
जोड़ा लेखक bames53, स्रोत

जैसा कि बताया गया है, आपको एक सभ्य पुस्तक की आवश्यकता है। अपने सवालों के जवाब देने के लिए आपको निम्नलिखित जानना चाहिए: कक्षाओं को आमतौर पर .h फ़ाइल में परिभाषित किया जाता है और .cpp या .cc फ़ाइल में कार्यान्वित किया जाता है। आपके पास तीन फाइलें होनी चाहिए: खाता.h, account.cc और main.cc. आप केवल .cc फ़ाइलों को संकलित करते हैं और .h फ़ाइलों को कोड के उन हिस्सों में शामिल किया जाता है जहां आपको कक्षा के बारे में कुछ जानने की आवश्यकता होती है (यानी जब आप वास्तव में कक्षा के साथ कुछ कर रहे होते हैं)। यदि आप g ++ (linux, यूनिक्स या mingw मुझे लगता है) का उपयोग कर रहे हैं तो आप निम्न आदेश का उपयोग कर प्रोग्राम संकलित कर सकते हैं: g ++ main.cc Account.cc -o program_name

main.cc:

#include 
using namespace std;

#include "Account.h"
int main() {
  Account a("first account");

  cout << a.get_balance() << endl;
  a.deposit(100.0);
  cout << a.get_balance() << endl;

  return 0;
}

आपकी खाता.h फ़ाइल इस तरह दिखनी चाहिए:

#include
//#include  -- not needed here

// using namespace std; -- don't use 'using' in header files

class Account
{
  std::string name;
  double balance;

public:
    Account(std::string n);
    Account(std::string n, double initial_balance);

    std::string get_name() const;
    double get_balance() const;

    void deposit(double amount);

    void widthdraw(double amount);

};

और अंत में आपकी Account.cc फ़ाइल को कक्षा को कार्यान्वित करना चाहिए।

#include "Account.h"

using namespace std;

Account::Account(string n) : name(n), balance(0.0) {}

Account::Account(string n, double initial_balance) :
name(n), balance(initial_balance) {}

string Account::get_name() const {
  return name;
}

double Account::get_balance() const {
  return balance;
}

void Account::deposit(double amount) {
  balance += amount;
}

void Account::widthdraw(double amount) {
  balance -= amount;//generously allow overdraft...
}

उम्मीद है की वो मदद करदे।

रोमन

1
जोड़ा