PDA

View Full Version : friends causing problem in msvc++


kashif
09-14-2003, 09:51 PM
hey there, im having some trouble with the "friends". When i compile this piece of code on msvc++ it gives me errors, when it really shouldnt because it compiles fine on linux. Is there something that has to be done to correct it?


#ifndef H_videoType
#define H_videoType

#include <iostream>
#include <string>

using namespace std;

class videoType
{
friend ostream& operator<<(ostream&, const videoType&);

public:
void setVideoInfo(string title, string star1,
string star2, string producer,
string director, string productionCo,
int setInStock);
//Function to set the details of a video.
//Private data members are set according to the parameters.
//Postcondition: videoTitle = title; movieStar1 = star1;
// movieStar2 = star2; movieProducer =
// producer; movieDirector = director;
// movieProductionCo = productionCo;
// copiesInStock = setInStock

int getNoOfCopiesInStock() const;
//Function to check the number of copies in stock.
//Postcondition: The value of the data member
// copiesInStock is returned.

void checkOut();
//Function to rent a video.
//Postcondition: The number of copies in stock is
// decremented by one.

void checkIn();
//Function to check in a video.
//Postcondition: The number of copies in stock is
// incremented by one.

void printTitle() const;
//Function to print the title of a movie.

void printInfo() const;
//Function to print the details of a video.
//The title of the movie, stars, director, and so on are
//displayed on the screen.

bool checkTitle(string title);
//Function to check whether the title is the same as the
//title of the video.
//Postcondition: Returns true if the title is the same as
// the title of the video;
// otherwise, returns false.

void updateInStock(int num);
//Function to increment the number of copies in stock by
//adding the value of the parameter num.
//Postcondition: copiesInStock = copiesInStock + num

void setCopiesInStock(int num);
//Function to set the number of copies in stock.
//Postcondition: copiesInStock = num

string getTitle() const;
//Function to return the title of the video.
//Postcondition: The title of the video is returned.

videoType(string title = "", string star1 = "",
string star2 = "", string producer = "",
string director = "", string productionCo = "",
int setInStock = 0);
//constructor
//Private data members are set according to the
//incoming parameters. If no values are specified, the
//default values are assigned.
//Postcondition: videoTitle = title; movieStar1 = star1;
// movieStar2 = star2; movieProducer = producer;
// movieDirector = director;
// movieProductionCo = productionCo;
// copiesInStock = setInStock

//Overloads the relational operators.
bool operator==(const videoType&) const;
bool operator!=(const videoType&) const;
bool operator<(const videoType&) const;
//operator< must be defined for videos in order for
//the sort function to work

private:
string videoTitle; //variable to store the name
//of the movie
string movieStar1; //variable to store the name
//of the star
string movieStar2; //variable to store the name
//of the star
string movieProducer; //variable to store the name
//of the producer
string movieDirector; //variable to store the name
//of the director
string movieProductionCo; //variable to store the name
//of the production company
int copiesInStock; //variable to store the number of
//copies in stock
};

#endif


.cpp file

#include <iostream>
#include <string>
#include <cctype>
#include "videoType.h"

using namespace std;

void videoType::setVideoInfo(string title, string star1,
string star2, string producer,
string director, string productionCo,
int setInStock)
{
videoTitle = title;
movieStar1 = star1;
movieStar2 = star2;
movieProducer = producer;
movieDirector = director;
movieProductionCo = productionCo;
copiesInStock = setInStock;
}

void videoType::checkOut()
{
if(copiesInStock > 0)
copiesInStock--;
else
cout<<"Currently out of stock"<<endl;
}

void videoType::checkIn()
{
copiesInStock++;
}

int videoType::getNoOfCopiesInStock() const
{
return copiesInStock;
}

void videoType::printTitle() const
{
cout<<"Video Title: "<<videoTitle<<endl;
}

void videoType::printInfo() const
{
cout<<"Video Title: "<<videoTitle<<endl;
cout<<"Stars: "<<movieStar1<<" and "<<movieStar2<<endl;
cout<<"Producer: "<<movieProducer<<endl;
cout<<"Director: "<<movieDirector<<endl;
cout<<"Production Company: "<<movieProductionCo<<endl;
cout<<"Copies in stock: "<<copiesInStock<<endl;
}

bool videoType::checkTitle(string title)
{
return(videoTitle == title);
}

void videoType::updateInStock(int num)
{
copiesInStock += num;
}

void videoType::setCopiesInStock(int num)
{
copiesInStock = num;
}

string videoType::getTitle() const
{
return videoTitle;
}

videoType::videoType(string title, string star1,
string star2, string producer,
string director,
string productionCo, int setInStock)
{
setVideoInfo(title, star1, star2, producer, director,
productionCo, setInStock);
}

bool videoType::operator==(const videoType& other) const
{
return (videoTitle == other.videoTitle);
}

bool videoType::operator!=(const videoType& other) const
{
return (videoTitle != other.videoTitle);
}

bool videoType::operator<(const videoType& other) const
{
return (videoTitle < other.videoTitle);
}

ostream& operator<<(ostream& os, const videoType& video)
{
os<<endl;
os<<"Video Title: "<<video.videoTitle<<endl;
os<<"Stars: "<<video.movieStar1<<" and "
<<video.movieStar2<<endl;
os<<"Producer: "<<video.movieProducer<<endl;
os<<"Director: "<<video.movieDirector<<endl;
os<<"Production Company: "<<video.movieProductionCo<<endl;
os<<"Copies in stock: "<<video.copiesInStock<<endl;
os<<"_____________________________________"<<endl;
return os;
}

sans-hubris
09-14-2003, 10:39 PM
It would help if you had included the errors in your post.