【问题标题】:interface and implementation C++接口和实现 C++
【发布时间】:2018-11-07 04:10:41
【问题描述】:

我正在编写一个代码来分离接口和它的实现,但是它有一个错误,我遵循了接口和类的正确语法,我已经看到了很多关于这个主题的例子,知道我是一名前 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
错误 C2059 语法错误:',' console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app.cpp 22
错误 C2238 ';'之前出现意外令牌 console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app.cpp 22
错误 C2061 语法错误:标识符“银行” console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app.cpp 24
错误 C2065 'account1': undeclared identifier console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app.cpp 25
错误 C2065 'account2': undeclared identifier console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app.cpp 25
错误 C2614 'Employee':非法成员初始化:'ac1' 不是基础或成员 console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app .cpp 25
错误 C2614 'Employee':非法成员初始化:'ac2' 不是基础或成员 console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app .cpp 25
错误 C2065 'ac1': undeclared identifier console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app.cpp 37
错误 C2228 '.print' 左侧必须有类/结构/联合 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' 左侧必须有类/结构/联合 console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app.cpp 38 错误 C2661 'Employee::Employee': 没有重载函数需要 4 个参数 console_App c:\users\dell_alrfou\source\repos\console_app\console_app\console_app.cpp 81

【问题讨论】:

  • 您显示的代码中没有覆盖说明符。

标签: c++ interface compiler-errors


【解决方案1】:

您需要在尝试使用之前声明或定义Bank 类。

您需要将Bank(及其Interface_Bank 基类)的定义移到class Employee 之前。

【讨论】:

    【解决方案2】:
    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;
    }
    

    【讨论】:

    • 非常感谢刘云斌的帮助和您的宝贵时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多