The Shed is going Social! Join us on FaceBook and Twitter and chime in on the conversation.
|
 |
|
Dev Shed Forums
> Programming Languages
> C Programming
|
overloading operators..Plesae help
Discuss overloading operators..Plesae help in the C Programming forum on Dev Shed. overloading operators..Plesae help C programming forum discussing all C derivatives, including C#, C++, Object-C, and even plain old vanilla C. These languages are low level languages, and used on projects such as device drivers, compilers, and even whole computer operating systems.
|
|
 |
|
|
|
|

Dev Shed Forums Sponsor:
|
|
|

March 28th, 2003, 10:43 PM
|
|
Registered User
|
|
Join Date: Sep 2002
Posts: 21
Time spent in forums: 1 h 52 m 59 sec
Reputation Power: 0
|
|
|
overloading operators..Plesae help
I have many errors when I compiled it. I think it's all from overloading operator. I have so many errors...this is one of them
binary '+' : no operator defined which takes a right-hand operand of type 'class FuelPurchase' (or there is no acceptable conversion. Can anyone fix please this for me?
Here's my coding
Header file of vehicle
PHP Code:
#ifndef VEHICLE_H
#define VEHICLE_H
using namespace std;
static const int LEN = 25;
class Vehicle
{
private:
char name[LEN];
char model[LEN];
int year;
int totalcost;
int totallitres;
public:
Vehicle();
Vehicle(const char *n, char *m, int y);
Vehicle(const Vehicle &r); //copy constructor
const operator +(const Journey& m) const;
const operator +(const FuelPurchase& f) const;
print();
};
#endif
source file of Vehicle
PHP Code:
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#include "vehicle.h"
using namespace std;
Vehicle::Vehicle()
{
strcpy(name, "");
strcpy(model, "");
year = 0;
}
Vehicle::Vehicle(char *n, char *m, int y)
{
strncpy(name, n, LEN);
strncpy(model, m, LEN);
year = y;
}
Vehicle::Vehicle(const Vehicle &r) //copy constrcutor
{
name = r.name;
model = r.model;
year = r.year;
totalcost = r.totalcost;
totallitres = r.totallitres;
}
Vehicle:perator +(const Journey& m); //First additional operator
{
totaldistance = totaldistance + m.distance;
}
Vehicle:perator +(const FuelPurchase& f); //Second additonal operator
{
totalcost = totalcost + f.cost;
totallitrs = totallitres + f.litres;
}
Vehicle:Print()
{ int distance=0,services=0,cost=0,litres=0; //all new vehicles begins with zero kilometers travelled and zero fuel
double fueleconomy=0, average=0; //Set number of decimal places
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(1);
cout <<"Vehicle: "<<endl; //Display the manufacturer, model, year of manufacture
cout <<distance<<"km travelled requiring "<<litres<<" litres of fuel at a cost of$"<<cost<<endl;//total kilometers travleed, total fuel costs
if (distance=0)
{
cout <<"No travel has been recorded yet"<<endl;
cout <<"No fuel has been purchased yet"<<endl;
}
else
{
int fueleconomy = (litres/distance)*100; //fuel economy(liters per 100 kilometers)
cout << "This vehicle achieved a fuel economy of "<<fueleconomy<<"litres/100km"<<endl;
int services = distance/100;
cout << "This vehicle should have undergone "<<services<<" service(s)"<<endl; //total number of services
average = cost/litres;
cout << "The average cost of fuel was $ "<<average<<endl;
}
return(0);
}
this si header file for journey
PHP Code:
#ifndef JOURNEY_H
#define JOURNEY_H
class Journey
{
private:
int distance;
public:
Journey();
Journey(const int distance);
};
#endif
this is source file file journey
PHP Code:
#include <iostream>
#include "journey.h"
using namespace std;
Journey::Journey()
{
distance = 0;
}
Journey::Journey(int distance)
{
distance = d;
}
here's the header file for FuelPurchase
PHP Code:
#ifndef FUELPURCHASE_H
#define FUELPURCHASE_H
class FuelPurchase
{
private:
int cost;
int litres;
public:
FuelPurchase();
FuelPurchase(const int c, int l);
};
#endif
This is source file for FuelPurchase
PHP Code:
#include <iostream.h>
#include "fuelpurchase.h"
using namespace std;
FuelPurchase::FuelPurchase()
{
cost = 0;
litres = 0;
}
FuelPurchase::FuelPurchase(int c, int l);
{
cost = c;
litres = l;
}
Here's the main code...
PHP Code:
#include <iostream>
#include <string>
using namespace std;
#include "Vehicle.h"
#include "FuelPurchase.h"
#include "Journey.h"
int main(int argc, char* argv[])
{
Vehicle a("BMW", "A6", 2003);
Vehicle b("Toyota", "A100", 2003);
Vehicle c("Mercedes-Benz", "CL600", 2003);
cout << "Original Statistical:" << endl;
cout << "=====================" << endl;
a.print();
b.print();
c.print();
a = a + FuelPurchase(50, 60);
a = a + Journey(150);
a = a + FuelPurchase(12, 15);
b = b + FuelPurchase(50, 60);
b = b + Journey(250);
b = b + FuelPurchase(22, 22);
c = c + FuelPurchase(50, 60);
c = c + Journey(350);
c = c + FuelPurchase(50, 40);
cout << "Final Statistics:" << endl;
cout << "=================" << endl;
a.print();
b.print();
c.print();
return(0);
}
Last edited by Tozilla : March 29th, 2003 at 01:19 AM.
|

March 29th, 2003, 08:09 AM
|
|
Contributing User
|
|
Join Date: Nov 2002
Location: Blacksburg VA/Philly PA
Posts: 38
Time spent in forums: 2 h 29 m
Reputation Power: 11
|
|
|
I think you're right the problem is withing the overloading.
I didn't look through the code too carefully, but one thing that flagged me was the declarations for the overloaded operators.
perhaps try something like:
Journey operator +(const Journey& m) const;
and then change the appropriate type for the other declaration. I'm not exactly sure what type incrimenting FuelPurchase will do, but try changing the return types in the declaration and implementation.
|

March 30th, 2003, 03:26 AM
|
|
Contributing User
|
|
Join Date: Feb 2001
Posts: 1,365

Time spent in forums: 18 h 9 m 25 sec
Reputation Power: 14
|
|
|
Here are two problems:
const operator +(const Journey& m) const;
const operator +(const FuelPurchase& f) const;
What are the return types of those two functions?
Also, when you post an error message and several hundred lines of code, it would be very helpful if you posted the line the error occurred on.
Last edited by 7stud : March 30th, 2003 at 03:33 AM.
|

March 30th, 2003, 03:30 AM
|
|
Registered User
|
|
Join Date: Sep 2002
Posts: 21
Time spent in forums: 1 h 52 m 59 sec
Reputation Power: 0
|
|
Quote: Originally posted by 7stud
Here are two problems:
const operator +(const Journey& m) const;
const operator +(const FuelPurchase& f) const;
What are the return types of those two functions?
Also, when you post an error message and a several hundred lines of code, it would be very helpful if you posted the line the error occurred on. |
you mean the error message?
I only got three error messages:
vehicle.cpp(13) : error C2143: syntax error : missing ';' before 'PCH creation point'
vehicle.cpp(38) : error C2511: '+' : overloaded member function 'class Vehicle (const class Journey &)' not found in 'Vehicle'
vehicle.h(15) : see declaration of 'Vehicle'
vehicle.cpp(46) : error C2511: '+' : overloaded member function 'class Vehicle (const class FuelPurchase &)' not found in 'Vehicle'
vehicle.h(15) : see declaration of 'Vehicle'
|

March 30th, 2003, 03:36 AM
|
|
Contributing User
|
|
Join Date: Feb 2001
Posts: 1,365

Time spent in forums: 18 h 9 m 25 sec
Reputation Power: 14
|
|
|
Most people, including me, are not going to count lines to find out where the error is. If you can't take the time to comment your code to point to the lines where the errors are, I don't think you should expect people to take the time to help you.
|

March 30th, 2003, 03:39 AM
|
|
Registered User
|
|
Join Date: Sep 2002
Posts: 21
Time spent in forums: 1 h 52 m 59 sec
Reputation Power: 0
|
|
Quote: Originally posted by 7stud
Here are two problems:
const operator +(const Journey& m) const;
const operator +(const FuelPurchase& f) const;
What are the return types of those two functions?
Also, when you post an error message and a several hundred lines of code, it would be very helpful if you posted the line the error occurred on. |
you mean the error message?
I only got four error messages:
PHP Code:
//vehicle.cpp(13) : error C2143: syntax error : missing ';' before 'PCH creation point'
Vehicle::Vehicle()
{
strcpy(name, "");
strcpy(model, "");
year = 0;
}
PHP Code:
Vehicle::Vehicle(const char *n, char *m, int y)
{
strncpy(name, n, LEN);
strncpy(model, m, LEN);
year = y;
}
PHP Code:
Vehicle::Vehicle(const Vehicle &r) {
name[LEN] = r.name[LEN];
model[LEN] = r.model[LEN];
year = r.year;
totalcost = r.totalcost;
totallitres = r.totallitres;
}
PHP Code:
//vehicle.cpp(38) : error C2511: '+' : overloaded member function 'class Vehicle (const class Journey &)' not found in 'Vehicle'
Vehicle Vehicle::operator +(const Journey& m) //First additional operator
{
Vehicle v;
v.totaldistance = totaldistance + m.distance;
return (*this);
}
PHP Code:
//vehicle.cpp(46) : error C2511: '+' : overloaded member function 'class Vehicle (const class FuelPurchase &)' not found in 'Vehicle'
Vehicle Vehicle::operator +(const FuelPurchase &f)
{
Vehicle v;
v.totalcost = totalcost + f.cost;
v.totallitres = totallitres + f.litres;
return (*this);
}
PHP Code:
//vehicle.h(15) : see declaration of 'Vehicle' <<<<this directs me to the beginning of the Vehicle header file
Last edited by Tozilla : March 30th, 2003 at 03:50 AM.
|

March 30th, 2003, 04:39 AM
|
|
Contributing User
|
|
Join Date: Feb 2001
Posts: 1,365

Time spent in forums: 18 h 9 m 25 sec
Reputation Power: 14
|
|
|
Now I refer you to the first four lines of my initial post.
|

March 30th, 2003, 04:53 AM
|
|
Registered User
|
|
Join Date: Sep 2002
Posts: 21
Time spent in forums: 1 h 52 m 59 sec
Reputation Power: 0
|
|
Quote: Originally posted by 7stud
Now I refer you to the first four lines of my initial post. |
It should be like this for returning values?
PHP Code:
//overloading operator in Vehicle header file
Vehicle operator +(const Journey& m) const;
Vehicle operator +(const FuelPurchase& f) const;
PHP Code:
//implmentation in Vehicle source file
Vehicle Vehicle::operator +(const Journey& m)
{
Vehicle v;
v.totaldistance = totaldistance + m.distance;
return (*this);
}
Vehicle Vehicle::operator +(const FuelPurchase &f)
{
Vehicle v;
v.totalcost = totalcost + f.cost;
v.totallitres = totallitres + f.litres;
return (*this);
}
|

March 30th, 2003, 03:31 PM
|
|
Registered User
|
|
Join Date: Sep 2002
Posts: 21
Time spent in forums: 1 h 52 m 59 sec
Reputation Power: 0
|
|
|
yes..it's the same
|
Developer Shed Advertisers and Affiliates
| Thread Tools |
Search this Thread |
|
|
|
| Display Modes |
Rate This Thread |
Linear Mode
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
|
|