0

I'm having trouble with an inheritance hierarchy program. I have widdled this program down from a lot of errors to just 1 error. However, I can't seem to figure out how to correct it.

Here is the error message I'm receiving:

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion)

Here is what I have:

Package.h

#ifndef Package_H
#define Package_H

#include <iostream>
#include <string>

using namespace std;

//The class Package is the base class for derived classes TwoDayPackage and OverNightPackage
  
class Package //begins class Package  
{  
public:  
    Package(const string &, const string &, const string &, const string &, const string &, const string &, const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
  
    //set and get functions for sender  
    void setSenderName(const string &);  
    string getSenderName() const;  
  
    void setSenderAddress(const string &);  
    string getSenderAddress() const;  
      
    void setSenderCity(const string &);  
    string getSenderCity() const;  
  
    void setSenderState(const string &);  
    string getSenderState() const;  
  
    void setSenderZip(const string &);  
    string getSenderZip() const;  
      
    //set and get functions for recipient  
    void setRecipientName(const string &);   
    string getRecipientName() const;   
  
    void setRecipientAddress(const string &);   
    string getRecipientAddress() const;   
  
    void setRecipientCity(const string &);   
    string getRecipientCity() const;   
  
    void setRecipientState(const string &);   
    string getRecipientState() const;  
  
    void setRecipientZip(const string &);   
    string getRecipientZip() const;  
      
    void setWeight(double);  
    double getWeight() const;  
    void setShip(double);  
    double getShip() const;  
    double calculateCost() const;  
  
private:  
    string senderName;  
    string senderAddress;  
    string senderCity;  
    string senderState;  
    string senderZip;  
    string recipientName;  
    string recipientAddress;  
    string recipientCity;  
    string recipientState;  
    string recipientZip;  
    double weight;  
    double shipCost;  
};

#endif

Package.cpp

#include <iostream>
#include <string>
using namespace std;

#include "Package.h"


Package::Package(const string & sname, const string & saddress, const string & scity, const string & sstate, const string & szip, const string & rname, const string & raddress, const string & rcity, const string & rstate, const string & rzip, double weight, double shipCost, double calculateCost)  
{  
    senderName = sname;  
    senderAddress = saddress;  
    senderCity = scity;  
    senderState = sstate;  
    senderZip = szip;  
    recipientName = rname;  
    recipientAddress = raddress;  
    recipientCity = rcity;  
    recipientState = rstate;  
    recipientZip = rzip;  
    setWeight(weight);  
    setShip(shipCost);  
}  
  
void Package::setSenderName(const string & sname)  
{  
    senderName = sname;  
}  
  
string Package::getSenderName() const  
{  
    return senderName;  
}  
  
void Package::setSenderAddress(const string & saddress)  
{  
    senderAddress = saddress;  
}  
  
string Package::getSenderAddress() const  
{  
    return senderAddress;  
}  
void Package::setSenderCity(const string & scity)  
{  
    senderCity = scity;  
}  
  
string Package::getSenderCity() const  
{  
    return senderCity;  
}  
  
void Package::setSenderState(const string & sstate)  
{  
    senderState = sstate;  
}  
  
string Package::getSenderState() const  
{  
    return senderState;  
}  
  
void Package::setSenderZip(const string & szip)  
{  
    senderZip = szip;  
}  
  
string Package::getSenderZip() const  
{  
    return senderZip;  
}  
  
void Package::setRecipientName(const string & rname)  
{  
    recipientName = rname;  
}  
  
string Package::getRecipientName() const  
{  
    return recipientName;  
}  
  
void Package::setRecipientAddress(const string & raddress)  
{  
    recipientAddress = raddress;  
}  
  
string Package::getRecipientAddress() const  
{  
    return recipientAddress;  
}  
  
void Package::setRecipientCity(const string & rcity)  
{  
    recipientCity = rcity;  
}  
  
string Package::getRecipientCity() const  
{  
    return recipientCity;  
}  
  
void Package::setRecipientState(const string & rstate)  
{  
    recipientState = rstate;  
}  
  
string Package::getRecipientState() const  
{  
    return recipientState;  
}  
void Package::setRecipientZip(const string & rzip)  
{  
    recipientZip = rzip;  
}  
  
string Package::getRecipientZip() const  
{  
    return recipientZip;  
}  
  
void Package::setWeight(double weight)  
{  
    weight = (weight < 0.0 ) ? 0.0 : weight;  
}  
double Package::getWeight() const  
{  
    return weight;  
}  
void Package::setShip(double shipCost)  
{  
    shipCost = ( shipCost < 0.0) ? 0.0 : shipCost;  
}  
  
double Package::getShip() const  
{  
    return shipCost;  
}  
  
double Package::calculateCost() const  
{    
    return weight * shipCost;  
}  


//The class TwoDayPackage is the first derived class from class Package
  
class TwoDayPackage : public Package  
{  
public:  
    TwoDayPackage(const string &, const string &, const string &, const string &, const string &, const string &,  
		const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
      
    void setFlatFee(double);  
    double getFlatFee() const;  
    void calculateCost() const;  
  
private:  
    double flatFee;  
};  
  
  
//The class OverNightPackage is the second derived class from class Package
  
class OverNightPackage : public Package  
{  
public:  
    OverNightPackage(const string &, const string &, const string &, const string &, const string &, const string &,
		const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
  
        void setFee(double);  
        double getFee() const;  
        void calculateCost() const;  
  
private:  
    double fee;  
};

PackageTest.cpp

#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string>

using namespace std;
using std::setprecision;

#include "Package.cpp"


//Test File
  
int main()  
{  
    OverNightPackage box("John Doe", "789 Fire Street", "Hell", "MI", "48169", "Jane Doe", "987 Leg Sun Crossing", "Intercourse", "PA", "17534", 10.00, 1.50, .85);  
      
    TwoDayPackage parcel("John Doe", "789 Fire Street", "Hell", "MI", "48169", "Jane Doe", "987 Leg Sun Crossing", "Intercourse", "PA", "17534", 15.00, 1.05, 5.00);  
  
    cout << fixed << setprecision(2);  
      
	cout << "To ship a box with overnight delivery:\n"
         << "\nThe sender    " << box.getSenderName()  
         << "\n              " << box.getSenderAddress()
         << "\n              " << box.getSenderCity() << ", " << box.getSenderState() << "  " << box.getSenderZip() 
      
  
         << "\nThe recipient   " << box.getRecipientName()  
         << "\n                " << box.getRecipientAddress()
         << "\n                " << box.getRecipientCity() << ", " << box.getRecipientState() << "  " << box.getRecipientZip()  
         << "\nThe cost is   $ " << box.calculateCost()
      
      
	     << "\n\n\n\nTo ship a parcel with 2 day delivery:\n"
         << "\nThe sender    " << parcel.getSenderName()  
         << "\n              " << parcel.getSenderAddress()
         << "\n              " << parcel.getSenderCity() << ", " << parcel.getSenderState() << "  " << parcel.getSenderZip()  
      
  
         << "\nThe recipient " << parcel.getRecipientName() 
         << "\n              " << parcel.getRecipientAddress()
         << "\n              " << parcel.getRecipientCity() << ", " << parcel.getRecipientState() << "  " << parcel.getRecipientZip()
         << "\nThe cost is   $ "<< parcel.calculateCost() << endl;  
 
	_getch();

}

Does anyone know how to correct this issue?

4
Contributors
17
Replies
19
Views
8 Years
Discussion Span
Last Post by chaoticabyss99
0

you're trying to 'cout' the return value of some method, but the method might be returning 'void'.

0

parcel.calculateCost() and box.calculateCost() seems to be the culprits. In the derived class the methods calculateCost returns 'void'.

0

This line: << "\nThe cost is $ " << box.calculateCost() is probably causing the problem. The function calculateCost() isn't returning anything (void). To solve the problem, you should delete the function declaration from TwoDayPackage and OverNightPackage. The class 'Package' already has a calculateCost-function, so why make 2 more?

[edit]Too slow .... what ^^ said.

0

parcel.calculateCost() and box.calculateCost() seems to be the culprits. In the derived class the methods calculateCost returns 'void'.

When I change calculateCost to return 'double' I get 31 error messages. They are:

error LNK2005: "public: __thiscall Package::Package(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,double,double,double)" (??0Package@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@000000000NNN@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setSenderName(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setSenderName@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getSenderName(void)const " (?getSenderName@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setSenderAddress(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setSenderAddress@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getSenderAddress(void)const " (?getSenderAddress@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setSenderCity(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setSenderCity@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getSenderCity(void)const " (?getSenderCity@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setSenderState(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setSenderState@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getSenderState(void)const " (?getSenderState@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setSenderZip(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setSenderZip@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getSenderZip(void)const " (?getSenderZip@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setRecipientName(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setRecipientName@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getRecipientName(void)const " (?getRecipientName@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setRecipientAddress(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setRecipientAddress@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getRecipientAddress(void)const " (?getRecipientAddress@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setRecipientCity(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setRecipientCity@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getRecipientCity(void)const " (?getRecipientCity@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setRecipientState(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setRecipientState@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getRecipientState(void)const " (?getRecipientState@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setRecipientZip(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setRecipientZip@Package@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Package::getRecipientZip(void)const " (?getRecipientZip@Package@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setWeight(double)" (?setWeight@Package@@QAEXN@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: double __thiscall Package::getWeight(void)const " (?getWeight@Package@@QBENXZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: void __thiscall Package::setShip(double)" (?setShip@Package@@QAEXN@Z) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: double __thiscall Package::getShip(void)const " (?getShip@Package@@QBENXZ) already defined in Package.obj
1>PackageTest.obj : error LNK2005: "public: double __thiscall Package::calculateCost(void)const " (?calculateCost@Package@@QBENXZ) already defined in Package.obj
1>PackageTest.obj : error LNK2019: unresolved external symbol "public: double __thiscall OverNightPackage::calculateCost(void)" (?calculateCost@OverNightPackage@@QAENXZ) referenced in function _main
1>PackageTest.obj : error LNK2019: unresolved external symbol "public: double __thiscall TwoDayPackage::calculateCost(void)" (?calculateCost@TwoDayPackage@@QAENXZ) referenced in function _main
1>PackageTest.obj : error LNK2019: unresolved external symbol "public: __thiscall TwoDayPackage::TwoDayPackage(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,double,double,double)" (??0TwoDayPackage@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@000000000NNN@Z) referenced in function _main
1>PackageTest.obj : error LNK2019: unresolved external symbol "public: __thiscall OverNightPackage::OverNightPackage(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,double,double,double)" (??0OverNightPackage@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@000000000NNN@Z) referenced in function _main

0

Read my previous post. Also: the classes don't have a default contructor, so you might want to change that :)

0

This line: << "\nThe cost is $ " << box.calculateCost() is probably causing the problem. The function calculateCost() isn't returning anything (void). To solve the problem, you should delete the function declaration from TwoDayPackage and OverNightPackage. The class 'Package' already has a calculateCost-function, so why make 2 more?

[edit]Too slow .... what ^^ said.

When I deleted the function from declaration from TwoDayPackage and OverNightPackage, I get 29 errors:confused:

0

What errors? Post your new code, I'm not in the mood to stare into my crystal ball to locate your problem :)

0

What errors? Post your new code, I'm not in the mood to stare into my crystal ball to locate your problem :)

Package.h

#ifndef Package_H
#define Package_H

#include <iostream>
#include <string>

using namespace std;

//The class Package is the base class for derived classes TwoDayPackage and OverNightPackage
  
class Package //begins class Package  
{  
public:  
    Package(const string &, const string &, const string &, const string &, const string &, const string &, const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
  
    //set and get functions for sender  
    void setSenderName(const string &);  
    string getSenderName() const;  
  
    void setSenderAddress(const string &);  
    string getSenderAddress() const;  
      
    void setSenderCity(const string &);  
    string getSenderCity() const;  
  
    void setSenderState(const string &);  
    string getSenderState() const;  
  
    void setSenderZip(const string &);  
    string getSenderZip() const;  
      
    //set and get functions for recipient  
    void setRecipientName(const string &);   
    string getRecipientName() const;   
  
    void setRecipientAddress(const string &);   
    string getRecipientAddress() const;   
  
    void setRecipientCity(const string &);   
    string getRecipientCity() const;   
  
    void setRecipientState(const string &);   
    string getRecipientState() const;  
  
    void setRecipientZip(const string &);   
    string getRecipientZip() const;  
      
    void setWeight(double);  
    double getWeight() const;  
    void setShip(double);  
    double getShip() const;  
    double calculateCost() const;  
  
private:  
    string senderName;  
    string senderAddress;  
    string senderCity;  
    string senderState;  
    string senderZip;  
    string recipientName;  
    string recipientAddress;  
    string recipientCity;  
    string recipientState;  
    string recipientZip;  
    double weight;  
    double shipCost;  
};

#endif

Package.cpp

#include <iostream>
#include <string>
using namespace std;

#include "Package.h"


Package::Package(const string & sname, const string & saddress, const string & scity, const string & sstate, const string & szip, const string & rname, const string & raddress, const string & rcity, const string & rstate, const string & rzip, double weight, double shipCost, double calculateCost)  
{  
    senderName = sname;  
    senderAddress = saddress;  
    senderCity = scity;  
    senderState = sstate;  
    senderZip = szip;  
    recipientName = rname;  
    recipientAddress = raddress;  
    recipientCity = rcity;  
    recipientState = rstate;  
    recipientZip = rzip;  
    setWeight(weight);  
    setShip(shipCost);  
}  
  
void Package::setSenderName(const string & sname)  
{  
    senderName = sname;  
}  
  
string Package::getSenderName() const  
{  
    return senderName;  
}  
  
void Package::setSenderAddress(const string & saddress)  
{  
    senderAddress = saddress;  
}  
  
string Package::getSenderAddress() const  
{  
    return senderAddress;  
}  
void Package::setSenderCity(const string & scity)  
{  
    senderCity = scity;  
}  
  
string Package::getSenderCity() const  
{  
    return senderCity;  
}  
  
void Package::setSenderState(const string & sstate)  
{  
    senderState = sstate;  
}  
  
string Package::getSenderState() const  
{  
    return senderState;  
}  
  
void Package::setSenderZip(const string & szip)  
{  
    senderZip = szip;  
}  
  
string Package::getSenderZip() const  
{  
    return senderZip;  
}  
  
void Package::setRecipientName(const string & rname)  
{  
    recipientName = rname;  
}  
  
string Package::getRecipientName() const  
{  
    return recipientName;  
}  
  
void Package::setRecipientAddress(const string & raddress)  
{  
    recipientAddress = raddress;  
}  
  
string Package::getRecipientAddress() const  
{  
    return recipientAddress;  
}  
  
void Package::setRecipientCity(const string & rcity)  
{  
    recipientCity = rcity;  
}  
  
string Package::getRecipientCity() const  
{  
    return recipientCity;  
}  
  
void Package::setRecipientState(const string & rstate)  
{  
    recipientState = rstate;  
}  
  
string Package::getRecipientState() const  
{  
    return recipientState;  
}  
void Package::setRecipientZip(const string & rzip)  
{  
    recipientZip = rzip;  
}  
  
string Package::getRecipientZip() const  
{  
    return recipientZip;  
}  
  
void Package::setWeight(double weight)  
{  
    weight = (weight < 0.0 ) ? 0.0 : weight;  
}  
double Package::getWeight() const  
{  
    return weight;  
}  
void Package::setShip(double shipCost)  
{  
    shipCost = ( shipCost < 0.0) ? 0.0 : shipCost;  
}  
  
double Package::getShip() const  
{  
    return shipCost;  
}  
  
double Package::calculateCost() const  
{    
    return weight * shipCost;  
}  


//The class TwoDayPackage is the first derived class from class Package
  
class TwoDayPackage : public Package  
{  
public:  
    TwoDayPackage(const string &, const string &, const string &, const string &, const string &, const string &,  
		const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
      
    void setFlatFee(double);  
    double getFlatFee() const;
	//void calculateCost() const;
  
private:  
    double flatFee;
};  
  
  
//The class OverNightPackage is the second derived class from class Package
  
class OverNightPackage : public Package  
{  
public:  
    OverNightPackage(const string &, const string &, const string &, const string &, const string &, const string &,
		const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
  
        void setFee(double);  
        double getFee() const;
		//void calculateCost() const;
  
private:  
    double fee;
};

PackageTest.cpp

#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string>

using namespace std;
using std::setprecision;

#include "Package.cpp"


//Test File
  
int main()  
{  
    OverNightPackage box("John Doe", "789 Fire Street", "Hell", "MI", "48169", "Jane Doe", "987 Leg Sun Crossing", "Intercourse", "PA", "17534", 10.00, 1.50, .85);  
      
    TwoDayPackage parcel("John Doe", "789 Fire Street", "Hell", "MI", "48169", "Jane Doe", "987 Leg Sun Crossing", "Intercourse", "PA", "17534", 15.00, 1.05, 5.00);  
  
    cout << fixed << setprecision(2);  
      
	cout << "To ship a box with overnight delivery:\n"
         << "\nThe sender    " << box.getSenderName()  
         << "\n              " << box.getSenderAddress()
         << "\n              " << box.getSenderCity() << ", " << box.getSenderState() << "  " << box.getSenderZip() 
      
  
         << "\nThe recipient   " << box.getRecipientName()  
         << "\n                " << box.getRecipientAddress()
         << "\n                " << box.getRecipientCity() << ", " << box.getRecipientState() << "  " << box.getRecipientZip()  
         << "\nThe cost is   $ " << box.calculateCost()
      
      
         << "\n\n\n\nTo ship a parcel with 2 day delivery:\n"
         << "\nThe sender    " << parcel.getSenderName()  
         << "\n              " << parcel.getSenderAddress()
         << "\n              " << parcel.getSenderCity() << ", " << parcel.getSenderState() << "  " << parcel.getSenderZip()  
      
  
         << "\nThe recipient " << parcel.getRecipientName() 
         << "\n              " << parcel.getRecipientAddress()
         << "\n              " << parcel.getRecipientCity() << ", " << parcel.getRecipientState() << "  " << parcel.getRecipientZip()
         << "\nThe cost is   $ "<< parcel.calculateCost() << endl;  
 
	_getch();

}

I'm using VC++ 2008 Express Edition; if that matters.

0

You use calculateCost as a function, but also as a variable to the constructor in this line: Package::Package(const string & sname, const string & saddress, const string & scity, const string & sstate, const string & szip, const string & rname, const string & raddress, const string & rcity, const string & rstate, const string & rzip, double weight, double shipCost, double calculateCost) So that would cause some problems.

Also this line: #include "Package.cpp" (in PackageTest.cpp) is wrong. I think you meant: #include "Package.h"

0

You use calculateCost as a function, but also as a variable to the constructor in this line: Package::Package(const string & sname, const string & saddress, const string & scity, const string & sstate, const string & szip, const string & rname, const string & raddress, const string & rcity, const string & rstate, const string & rzip, double weight, double shipCost, double calculateCost) So that would cause some problems.

Also this line: #include "Package.cpp" (in PackageTest.cpp) is wrong. I think you meant: #include "Package.h"

So, do I need to get rid of the variable in Package::Package or the function calculateCost??
And when I use #include "Package.h" in the PackageTest.cpp file, instead of #include "Package.cpp", I get 50 errors.

0

So, do I need to get rid of the variable in Package::Package or the function calculateCost??

Well, you're not doing anything with it right?

And when I use #include "Package.h" in the PackageTest.cpp file, instead of #include "Package.cpp", I get 50 errors.

*sigh*. Wack this code: (from package.cpp)

//The class TwoDayPackage is the first derived class from class Package
  
class TwoDayPackage : public Package  
{  
public:  
    TwoDayPackage(const string &, const string &, const string &, const string &, const string &, const string &,  
		const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
      
    void setFlatFee(double);  
    double getFlatFee() const;
	//void calculateCost() const;
  
private:  
    double flatFee;
};  
  
  
//The class OverNightPackage is the second derived class from class Package
  
class OverNightPackage : public Package  
{  
public:  
    OverNightPackage(const string &, const string &, const string &, const string &, const string &, const string &,
		const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
  
        void setFee(double);  
        double getFee() const;
		//void calculateCost() const;
  
private:  
    double fee;
};

in the header file (package.h). The header file is where the function-declaration should be.
Now :
- add default constructors/destructors
- write the function-defenition for the 2 derived classes. You have only made the declaration, but they don't do anything yet.

0

Well, you're not doing anything with it right?

*sigh*. Wack this code: (from package.cpp)

//The class TwoDayPackage is the first derived class from class Package
  
class TwoDayPackage : public Package  
{  
public:  
    TwoDayPackage(const string &, const string &, const string &, const string &, const string &, const string &,  
		const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
      
    void setFlatFee(double);  
    double getFlatFee() const;
	//void calculateCost() const;
  
private:  
    double flatFee;
};  
  
  
//The class OverNightPackage is the second derived class from class Package
  
class OverNightPackage : public Package  
{  
public:  
    OverNightPackage(const string &, const string &, const string &, const string &, const string &, const string &,
		const string &, const string &, const string &, const string &, double = 0.0, double = 0.0, double = 0.0); //constructor  
  
        void setFee(double);  
        double getFee() const;
		//void calculateCost() const;
  
private:  
    double fee;
};

in the header file (package.h). The header file is where the function-declaration should be.
Now :
- add default constructors/destructors
- write the function-defenition for the 2 derived classes. You have only made the declaration, but they don't do anything yet.

So, are you saying that the 2 derived classes need to be in the header file? I've only been learning c++ 6 weeks now, so I'm still an amateur.

0

The declaration should be in the header. The definition should be in the cpp file.

example:

foo.h

//declare the class
class foo
{
public:
   foo(){}; //do nothing constructor  
   int bar (int); //declare the function int bar(int)
}

foo.cpp:

#include "foo.h"
//etc

//definition of the function 'bar' from class 'foo'
int foo::bar(int i);
{
    return i+1; 
}
0

Thanks niek_e for your insight. It's late here and I need to get some sleep. I'll take a look at this again tomorrow ( or later today since it's already 3:15am) when my brain is working a lil better.

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.