I am working on a project dealing with inheritance in C++. My build keeps failing for some reasons dealing with missing vtables. A portion of the output is
"CustomerData::~CustomerData()", referenced from:
_main in main.o
"vtable for CustomerData", referenced from:
CustomerData::CustomerData() in main.o
This is my code:
#include <iostream>
#include <string>
using namespace std;
class PersonData{
protected:
string lastName;
string firstName;
string address;
string city;
string state;
int zip;
string phone;
public:
PersonData();
virtual ~PersonData();
virtual void setLastName(string);
virtual void setFirstName(string);
virtual void setAddress(string);
virtual void setCity(string);
virtual void setState(string);
virtual void setZip(int);
virtual void setPhone(string);
string getLastName() const;
string getFirstName() const;
string getAddress() const;
string getCity() const;
string getState() const;
int getZip() const;
string getPhone() const;
};
void PersonData::setLastName(string s){
lastName = s;
}
void PersonData::setFirstName(string s){
firstName = s;
}
void PersonData::setAddress(string s){
address = s;
}
void PersonData::setCity(string s){
city = s;
}
void PersonData::setState(string s){
state = s;
}
void PersonData::setZip(int i){
zip = i;
}
void PersonData::setPhone(string s){
phone = s;
}
string PersonData::getLastName() const{
return lastName;
}
string PersonData::getFirstName() const{
return firstName;
}
string PersonData::getAddress() const{
return address;
}
string PersonData::getCity() const{
return city;
}
string PersonData::getState() const{
return state;
}
int PersonData::getZip() const{
return zip;
}
string PersonData::getPhone() const{
return phone;
}
class CustomerData : public PersonData{
private:
int customerNumber;
bool mailingList = true;
public:
CustomerData();
virtual ~CustomerData();
void setCustomerNumber(int);
void setMailingList(bool);
void setLastName(string) override;
void setFirstName(string) override;
void setAddress(string) override;
void setCity(string) override;
void setState(string) override;
void setZip(int) override;
void setPhone(string) override;
int getCustomerNumber() const;
bool getMailingList() const;
};
CustomerData::CustomerData(){
lastName="";firstName="";address="";city="";state="";zip=0;phone="";customerNumber=0;mailingList=true;
}
void CustomerData::setCustomerNumber(int i){
customerNumber = i;
}
void CustomerData::setMailingList(bool i){
mailingList = i;
}
int CustomerData::getCustomerNumber() const{
return customerNumber;
}
bool CustomerData::getMailingList() const{
return mailingList;
}
int main(int argc, char** argv) {
CustomerData p1;
char s;
p1.setLastName("Obeid");
p1.setFirstName("Yahya");
p1.setAddress("1234 Fake Street");
p1.setCity("Santa Clara");
p1.setState("California");
p1.setZip(95051);
p1.setPhone("(408)-555-5555");
p1.setCustomerNumber(21);
cout<<"Do you wish to be on the mailing list? (y/n): ";
cin>>s;
if(s=='n'||s=='N'){
p1.setMailingList(false);
}
cout<<"NAME: "<<p1.getFirstName()<<" "<<p1.getLastName()<<endl;
cout<<"ADDRESS: "<<p1.getAddress()<<endl;
cout<<"CITY: "<<p1.getCity()<<endl;
cout<<"STATE: "<<p1.getState()<<endl;
cout<<"ZIP: "<<p1.getZip()<<endl;
cout<<"PHONE: "<<p1.getPhone()<<endl;
cout<<"CUSTOMER NUMBER: "<<p1.getCustomerNumber()<<endl;
cout<<"MAILING LIST: "<<p1.getMailingList()<<endl;
}
The reason I put all of my code is because I don't know what is causing the problem. If anyone can help me that would be appreciated.
Aucun commentaire:
Enregistrer un commentaire