Як створити екземпляр класу в C ++

Я C ++ початківець. У мене є клас, і коли я намагаюся скомпілювати, він каже, що він відсутній 'main'.

Що потрібно зробити, щоб створити примірник цього класу і отримати доступ до його методів?

#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
Ви визначаєте конструктор класу у визначенні main? Дійсно, навіть якщо це домашнє завдання, отримайте хорошу книгу C ++ і працюйте над самими основними основами.
додано Автор Christian Rau, джерело
Якщо це домашнє завдання, то чи не маєте ви книгу, яку ви читаєте? Я цілком впевнений, що він повинен охопити щось таке фундаментальне.
додано Автор ildjarn, джерело
додано Автор wkl, джерело
З чого ви вчитеся? Думаю, вам потрібна одна чи кілька книг, перелічених тут: stackoverflow.com/q/388242/10077
додано Автор Fred Larson, джерело

3 Відповіді

Усі програми C ++ вимагають того, що називається точкою входу . Функція main() завжди є точкою входу для стандартних C ++ програм. Потрібно надати main() , інакше лінкер скаржиться. Функцію main() можна написати двома способами:

int main()
{
    return 0;
}

Або, якщо ви очікуєте аргументи командного рядка:

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

Зауважте, що void main() не дійсний у C ++ . Також зверніть увагу на те, що оператор return не є суворо необхідним для функцій main() , але ви повинні явно писати їх у будь-якому випадку для узгодженості.

Стандарт C ++ 3.6.1 Основна функція [basic.start.main]

     

5. Оператор повернення в основному має ефект залишення основної функції (знищення будь-яких об'єктів з тривалістю автоматичного зберігання) і   виклик виходу з повернутим значенням як аргументом. Якщо контроль досягає   наприкінці main без зустрічі з оператором return, ефект   що виконується

  повернення 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 ; 
} 

Щоб створити примірник Account , ви оголосите змінну і передайте всі необхідні аргументи конструктора, наприклад:

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;
}

Це фактично досить фундаментальний аспект мови програмування C ++. Напевно, у вас є книга, яка охоплює це? Насправді, функції main() і #include зазвичай є першим, що ви дізнаєтеся при програмуванні на C ++. Настійно рекомендую вибрати гарну книгу C ++ і прочитати її і виконувати вправи.

6
додано
Дякую за це. Я додавав оригінальний пост.
додано Автор code511788465541441, джерело
Я маю головний метод в main_account.cc, він знаходиться в тій же папці, що і account.cc. коли я намагаюся скомпілювати main_account.cc він говорить, що акаунт не може бути знайдений в каталозі. Я спробував #include і #include , але він не працює. Також не існує виконуваного облікового запису в цьому каталозі, і я не можу це зробити, тому що, коли я намагаюся скомпілювати обліковий запис, він не говорить про головний метод
додано Автор code511788465541441, джерело
Я додав вміст обох файлів до оригінального повідомлення. Дякую
додано Автор code511788465541441, джерело
ok я зробив це і його, коли я компілювати main_account.cc він каже: "main_account.cc:(.text+0x92): невизначене посилання на` Account :: deposit (double) '"
додано Автор code511788465541441, джерело
отримав його робота дякую вам дуже багато вдячні
додано Автор code511788465541441, джерело
@ user521180: Перейменуйте Account.cc на Account.h і зробіть #include "Account.h" у Account_main.cc .
додано Автор In silico, джерело
@ user521180: Який файл обліковий запис класу знаходиться в? Чи називається вона Account.h ? Тому що вам потрібно також вказати розширення файлу в операторах include. Крім того, під час компіляції файлу ви передаєте шлях до вихідного файлу, а не у файл заголовка, тобто main_account.cc , а не Рахунок .
додано Автор In silico, джерело
@Tyler Ferraro: Так. Див. Мою останню редакцію.
додано Автор 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
додано
#include "Account.cc" працював. клас з головним методом компілюється, але Account.cc ще не скомпільований, це нормально?
додано Автор code511788465541441, джерело
Знайдіть когось (особисто), щоб навчити вас використовувати будь-який компілятор. Є багато кроків і концепцій, яких ви відсутні.
додано Автор Mooing Duck, джерело
Коли ви #include файлу, він, в основному, копіює цей файл у поточний, так що матеріал у цьому файлі дійсно збирається. Чому ви говорите, що це не компіляція?
додано Автор Mooing Duck, джерело
#include в основному вставляє вміст імені файлу в розташування директиви include. Так з #include "Account.cc" вміст Account.cc компілюється як частина main_account.cc. Взагалі вважається поганою практикою включити такі файли .cc, як це. Замість цього ви повинні використовувати файл заголовка '.h' і зрозуміти, як розповісти, що йде в заголовку, проти того, що йде у файлі .cc. У вашому випадку потрібно просто витягти #include і за допомогою простору імен std; , додати потрібні примірники std :: , а потім перейменуйте Account.cc на Account.h.
додано Автор bames53, джерело

як було зазначено, потрібна гідна книга. Щоб відповісти на ваші запитання, необхідно знати наступне: Класи зазвичай визначаються у файлі .h і реалізуються у файлі .cpp або .cc. Ви повинні мати три файли: Account.h, Account.cc і main.cc. Ви тільки компілюєте файли .cc, а файли .h включені до частин коду, де вам потрібно знати щось про клас (тобто коли ви дійсно щось робите з класом). Якщо ви використовуєте g ++ (linux, unix або mingw я думаю), ви можете скомпілювати програму за допомогою наступної команди: g ++ main.cc Account.cc -o имя_програми

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;
}

Файл Account.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
додано
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147