繁体   English   中英

C ++类和继承错误:对派生类的未定义引用

[英]C++ class and inheritance error: undefined reference to derived class

我正在尝试成为使用银行帐户类作为基类并使用支票和储蓄作为派生类的程序的一部分。 在进行任何奇特的数据处理之前,我一直在尝试建立基本框架,并且我遵循了一些教程以更好地理解类和继承。

我一直在寻找答案,但是找到的答案似乎不是我的问题,但是我可能只需要对代码进行另一组研究即可。

编译器错误:

main': badriver.cpp:20: undefined reference to函数中main': badriver.cpp:20: undefined reference to Checking :: getAccount()的引用badriver.cpp:23:未定义对Checking::setAccount(int)' badriver.cpp:24: undefined reference to Savings ::的Checking::setAccount(int)' badriver.cpp:24: undefined reference to setAccount(int)'badriver.cpp:26:对`Checking :: getAccount()'的未定义引用

badriver.cpp

#include "BankAccount.cpp"
#include "Checking.cpp"
#include "Savings.cpp"
#include <string>
#include <iostream>
using namespace std;

int main(){

   Checking c;
   Savings s;

   cout << "Checking: " << c.getAccount() << " - Type: " << c.getType() << endl;
   cout << "Savings: " << s.getAccount() << " - Type: " << s.getType() << endl;

   c.setAccount(9);
   s.setAccount(15);

   cout << "New Checking: " << c.getAccount() << endl;
   cout << "New Savings: " << s.getAccount() << endl;
       return 0;
    }

BankAccount.h

#ifndef BANKACCOUNT_H
#define BANKACCOUNT_H
#include <string>
using std::string;
using std::ostream;
using std::istream;

class BankAccount{

private:
   int myAccount;

   const char* color;

public:
   // default constructor
   BankAccount();
   BankAccount(int account);
   virtual ~BankAccount();

   virtual void setAccount(int)=0;
   int getAccount();
//    
//    void setSAccount(int);
//    int getSAccount();
//    
   virtual const char* getColor();                                            
   virtual const char* getType() = 0; 
   //virtual const char* getCType() = 0; 

protected:
   void setColor(const char*);   

};

#endif // BANKACCOUNT_H

BankAccount.cpp

#include "BankAccount.h"
#include "Checking.h"
#include "Savings.h"
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;

// default constructor
BankAccount::BankAccount(){
   account = 1;
}

BankAccount::~BankAccount(){}

// void BankAccount::setAccount(int account){
//    myAccount  = account;
// }

int BankAccount::getAccount(){
   return myAccount ;
}

BankAccount::BankAccount(int account){
   myAccount = account;
}

const char* BankAccount::getColor(){
   return color;
}

void BankAccount::setColor(const char* c){
   color = c;
}

Checking.h

#ifndef CHECKING_H
#define CHECKING_H
#include "BankAccount.h"
#include <string>
using std::string;
using std::ostream;
using std::istream;

class Checking : public BankAccount{

private:
   const char* type;

public:
   Checking();
   virtual ~Checking();
   void setAccount(int account);


   virtual const char* getType();

   void setChecking(int);
   int getChecking();
};

#endif //CHECKING_H

Checking.cpp

#include "Checking.h"
#include <string>
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;

Checking::Checking() : BankAccount(1), type("Checking"){}

Checking::~Checking(){}

BankAccount::~BankAccount(){}

void BankAccount::setAccount(int account){
   myAccount  = account;
}


const char* Checking::getType(){
   return type;
}   

Savings.h

#ifndef  SAVINGS_H
#define SAVINGS_H
#include "BankAccount.h"
#include <string>
using std::string;
using std::ostream;
using std::istream;

class Savings: public BankAccount{

private:
   const char* type;

public:
   Savings();
   virtual ~Savings();
   void setAccount(int account);

   virtual const char* getType();

   void setSavings(int);
   int getSavings();
};

#endif // SAVINGS_H

Savings.cpp

#include "Savings.h"
#include <string>
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;

Savings::Savings() : BankAccount(2), type("Savings"){}

Savings::~Savings(){}

BankAccount::~BankAccount(){}

void BankAccount::setAccount(int account){
   myAccount  = account;
}

const char* Savings::getType(){
   return type;
}   

感谢您为我指明正确方向的帮助。

Checking.cpp和Savings.cpp包含:

BankAccount::~BankAccount(){}

void BankAccount::setAccount(int account){
     myAccount  = account;
}

因为您在多个文件中定义了这些功能,所以这将导致未定义的行为。 您需要从Checking.cpp和Savings.cpp中删除这些行,而是放入编译器输出中列出的缺少功能的定义:

void Checking::setAccount(int account){
     // code here
}

等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM