интерфейс и реализация C ++ - PullRequest
0 голосов
/ 07 ноября 2018

Я пишу код для разделения интерфейса и его реализации, но в нем есть ошибка, я следовал правильному синтаксису интерфейсов и классов, я видел много примеров на эту тему, зная, что я бывший программист C #.

код:

#include "stdafx.h"
#include<iostream>
#include <String>
using namespace std;

            ///////////////////EMPLOYEE CLASS AND INTERFACE //////////////
class Interface_Employee
{

public:
    Interface_Employee() {}
    virtual ~Interface_Employee() {}
    virtual void print() = 0;    // "= 0" part makes this method pure virtual, and
                                 // also makes this class abstract.
};

class Employee : public Interface_Employee
{
    int ID, Age;
    Bank ac1, ac2; //composition
public:
    Employee(int a, int b, Bank account1, Bank account2)
        : ac1(account1), ac2(account2)
    {
        ID = a; Age = b;
    }
    ~Employee() {}


    // Provide implementation for the first method

    void print()
    {
        cout << "Age is:/n" << Age << "ID is:" << ID;
        ac1.print();
        ac2.print();
    }
};
                 ////////////BANK CLASS AND INTERFACE//////////////////


      class Interface_Bank
      {
          public:
          Interface_Bank() {}
          virtual ~Interface_Bank() {}
          virtual void print() = 0;    // "= 0" part makes this method pure virtual, and
                               // also makes this class abstract.
      };

      class Bank : public Interface_Bank
      {
        private:
        int balance, ID;

        public:
        Bank(int a, int b)
        {
          balance = a;
          ID = b;
        }
        ~Bank() {}

     // Provide implementation for the first method
        void print()
            {
              cout << "Balance is:/n" << balance << "ID is:" << ID;
            }


           };

        class Output {

           int main(void)
            {
            Bank a(1000, 1);
            Bank b(2000, 2);
            Employee c(2, 25, a, b);

            return 0;
           }

          };

Ошибка:

Код серьезности Описание Состояние подавления строки файла проекта Ошибка C3646 'ac1': неизвестный спецификатор переопределения console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 22 * ​​1012 * Ошибка C2059 синтаксическая ошибка: ',' console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 22 * ​​1017 * Ошибка C2238 неожиданный токен (ы) перед ';' console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 22 * ​​1022 * Ошибка Синтаксическая ошибка C2061: идентификатор «Банк» console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 24
Ошибка C2065 'account1': необъявленный идентификатор console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 25
Ошибка C2065 'account2': необъявленный идентификатор console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 25
Ошибка C2614 «Сотрудник»: недопустимая инициализация члена: «ac1» не является базой или членом console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 25
Ошибка C2614 «Сотрудник»: недопустимая инициализация члена: «ac2» не является базой или членом console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 25
Ошибка C2065 'ac1': необъявленный идентификатор console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 37
Ошибка C2228 слева от .print должна иметь класс / struct / union console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 37
Ошибка C2065 'ac2': необъявленный идентификатор console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 38
Ошибка C2228 слева от .print должна иметь класс / struct / union console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 38
Ошибка C2661 «Сотрудник :: Сотрудник»: перегруженная функция не принимает 4 аргумента console_App c: \ users \ dell_alrfou \ source \ repos \ console_app \ console_app \ console_app.cpp 81

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018
  1. Перед использованием Bank, вы должны объявить или определить его
  2. int main() не должно быть в class

Может работать следующее code:

#include<iostream>
#include <String>
using namespace std;

class Interface_Bank
{
public:
    Interface_Bank() {}
    virtual ~Interface_Bank() {}
    virtual void print() = 0;
};

class Bank : public Interface_Bank
{
private:
    int balance, ID;

public:
    Bank(int a, int b) : balance(a), ID(b)
    {
    }
    ~Bank() {}

    void print()
    {
        cout << "Balance is:/n" << balance << "ID is:" << ID;
    }
};

class Interface_Employee
{
public:
    Interface_Employee() {}
    virtual ~Interface_Employee() {}
    virtual void print() = 0;
};

class Employee : public Interface_Employee
{
private: 
    int ID, Age;
    Bank ac1, ac2;
public:
    Employee(int a, int b, Bank account1, Bank account2)
        : ID(a), Age(b), ac1(account1), ac2(account2)
    {
    }
    ~Employee() {}

    void print()
    {
        cout << "Age is:/n" << Age << "ID is:" << ID;
        ac1.print();
        ac2.print();
    }
};

int main(void)
{   
    Bank a(1000, 1);
    Bank b(2000, 2);
    Employee c(2, 25, a, b);
    c.print();
    return 0;
}
0 голосов
/ 07 ноября 2018

Вам необходимо объявить или определить класс Bank, прежде чем пытаться его использовать.

Вам нужно переместить определение Bank (и его Interface_Bank базовый класс) до class Employee.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...