I always get this errors when I try to compile and run program:
undefined reference to 'vtable for Currency'
undefined reference to 'WinMain'
[Error] ld returned 1 exit status
My program should convert values from one currency to another (from Euro or Dollars to hryvnias). I am using Dev C++, if that matters.
Class Currency
is an abstract base class, and classes Euro
and Dollar
are child classes.
File currency.h
:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
#include <locale.h>
using namespace std;
class Currency
{
protected:
double amount; //amount of money in some currency
float rate; //exchange rate
double amount_grivni; //amount of money in hryvnias
public:
virtual void Convert() = 0;
virtual void print();
virtual void Setamount(double);
virtual void Setrate(float);
virtual ~Currency();
};
class Euro: public Currency
{
public:
Euro();
Euro(double, float);
virtual void Convert();
virtual void print();
virtual void Setamount(double);
virtual void Setrate(float);
~Euro();
};
class Dollar:public Currency
{
public:
Dollar();
Dollar(double, float);
virtual void Convert();
virtual void print();
virtual void Setamount(double);
virtual void Setrate(float);
~Dollar();
};
File currency.cpp
:
#include "currency.h"
Currency::~Currency()
{
}
//----------------------------------------------------------------
Dollar::Dollar()
{
amount=0;
rate=0;
amount_grivni=0;
}
Dollar::Dollar(double cur_amount, float cur_rate)
{
amount=cur_amount;
rate=cur_rate;
amount_grivni=0;
}
void Dollar::Convert()
{
amount_grivni=amount*rate;
}
void Dollar::print()
{
cout<<"Amount of money in dollars = "<<amount;
cout<<"\nCurrent rate of dollar to hryvnia = "<<rate;
cout<<"\nAmount of money transferred in hryvnias = "<<amount_grivni<<"\n\n";
}
void Dollar::Setamount(double amount_dm)
{
amount=amount_dm;
}
void Dollar::Setrate(float rate_dm)
{
rate=rate_dm;
}
Dollar::~Dollar()
{
}
//----------------------------------------------------------------
Euro::Euro()
{
amount=0;
rate=0;
amount_grivni=0;
}
Euro::Euro(double cur_amount, float cur_rate)
{
amount=cur_amount;
rate=cur_rate;
amount_grivni=0;
}
void Euro::Convert()
{
amount_grivni=amount*rate;
}
void Euro::Setamount(double amount_d)
{
amount=amount_d;
}
void Euro::Setrate(float rate_d)
{
rate=rate_d;
}
void Euro::print()
{
cout<<"Amount of money in euros = "<<amount;
cout<<"\nCurrent rate of euro to hryvnia = "<<rate;
cout<<"\nAmount of money transferred in hryvnias = "<<amount_grivni<<"\n\n";
}
Euro::~Euro()
{
}
File currency_main.cpp
:
#include "currency.cpp"
int main()
{
int i, n, choice;
double cu_amount;
float cu_rate;
cout<<"Enter the number of currencies to process";
cin>>n;
Currency **arr=new Currency*[n];
for(i=0; i<n; i++)
{
cout<<"\nType number 1 for Dollar and 2 for Euro:";
cin>>choice;
switch(choice)
{
case 1:
{
cout<<"\nEnter amount of money in dollars = ";
cin>>cu_amount;
cout<<"\nEnter the exchange rate (1 dollar in hryvnia) = ";
cin>>cu_rate;
arr[i]=new Dollar(cu_amount, cu_rate);
break;
}
case 2:
{
cout<<"\nEnter amount of money in euro = ";
cin>>cu_amount;
cout<<"\nEnter the exchange rate (1 euro in hryvnia) = ";
cin>>cu_rate;
arr[i]=new Euro(cu_amount, cu_rate);
break;
}
}
}
for(i=0; i<n; i++)
{
arr[i]->Convert();
arr[i]->print();
}
for (i=0; i<n; i++)
delete arr[i];
delete[] arr;
return 0;
}
I tried to run this program in Visual Studio, but it didn't help. I created new files and copied code from old ones, but it also didn't work. I even reinstalled Dev C++ and rebooted the computer. The code looks simple, but I can't see what the problem is.