S
Simon
platform: Borland C++ 5.5 free Winxp
C++ source from: C++ primer Plus 5 Edition.
Complie Error: "operator >>" not implemented in type 'istream' for
arguments of type "STRING" in function main()
//mystring.h
#ifndef MYSTRING_H_
#define MYSTRING_H_
#include <iostream.h>
using std:
stream;
using std::istream;
class STRING
{
private:
char *str;
int len;
static int num_strings;
static const int CINLIM=80;
public:
STRING(const char *s); //constructor
STRING(); //default constructor
STRING(const STRING &);// copy constructor
~STRING();
int length()const { return len; }
//overload operator methods
STRING &operator=(const STRING &);
STRING &operator=(const char *);
char &operator[] (int i);
const char &operator[] (int i)const;
//overload operator friends
friend bool operator<(const STRING &st, const STRING &st2);
friend bool operator>(const STRING &st1, const STRING &st2);
friend bool operator==(const STRING &st, const STRING &st2);
friend ostream &operator<<(ostream &os, const STRING &st);
friend istream &operator>>(istream *is, STRING &st);
//static function
static int HowMany();
};
#endif
//mystring.cpp
#include <cstring.h>
#include <string.h>
#include "mystring.h"
using std::cin;
using std::cout;
int STRING::num_strings=0;
int STRING::HowMany()
{
return num_strings;
}
//class methods
STRING::STRING(const char *s)
{
len=std::strlen(s);
str=new char[len+1];
std::strcpy(str,s);
num_strings++;
}
STRING::STRING()
{
len=4;
str=new char[1];
str[0]='\0';
num_strings++;
}
STRING::STRING(const STRING &st)
{
num_strings++;
len=st.len;
str=new char[len+1];
std::strcpy(str,st.str);
}
STRING::~STRING()
{
--num_strings;
delete [] str;
}
//overload operator methods
//assign a STRING to a STRING
STRING & STRING:
perator=(const STRING &st)
{
if(this==&st)
return *this;
delete [] str;
len=st.len;
str=new char[len+1];
std::strcpy(str, st.str);
return *this;
}
// assign a C string to a string
STRING &STRING:
perator=(const char *s)
{
delete [] str;
len=std::strlen(s);
str=new char[len+1];
std::strcpy(str,s);
return *this;
}
char &STRING:
perator[] (int i)
{
return str;
}
const char &STRING:
perator[] (int i)const
{
return str;
}
bool operator<(const STRING &st1, const STRING &st2)
{
return (std::strcmp(st1.str, st2.str)<0);
}
bool operator>(const STRING &st1, const STRING &st2)
{
return st2.str<st1.str;
}
bool operator==(const STRING &st1, const STRING &st2)
{
return (std::strcmp(st1.str, st2.str)==0);
}
ostream &operator<<(ostream &os, const STRING &st)
{
os<<st.str;
return os;
}
istream & operator>> (istream & is, STRING &st)
{
char temp[STRING::CINLIM];
is.get(temp, STRING::CINLIM);
if(is)
st=temp;
while(is && is.get()!='\n')
continue;
return is;
}
//mysaying.cpp
#include <iostream.h>
#include "mystring.h"
const int ArSize=10;
const int MaxLen=81;
int main()
{
using std::cout;
using std::cin;
using std::endl;
STRING name;
cout<<"Hi, what's your name?\n>>";
cin >> name;
cout<<name<<", please enter up to "<<ArSize
<<"short sayings<empty line to quit>:\n";
STRING sayings[ArSize];
char temp[MaxLen];
int i;
for(i=0;i<ArSize;i++)
{
cout<<i+1<<": ";
cin.get(temp,MaxLen);
while(cin &&cin.get()!='\n')
continue;
if(!cin||temp[0]=='\n') //empty line
break;
else
sayings=temp; //overload assignment
}
int total=i;
cout<<"Here are you sayings:\n";
for(i=0;i<total;i++)
cout<<sayings[0]<<": "<<sayings<<endl;
int shortest=0;
int first=0;
for(i=1;i<total;i++)
{
if(sayings.length()<sayings[shortest].length())
shortest=i;
if(sayings<sayings[first])
first=i;
}
cout<<"Shortest saying:\n"<<sayings[shortest]<<endl;
cout<<"First aphabetically:\n"<<sayings[first]<<endl;
cout<<"This program used "<<STRING::HowMany()
<<"STRING objects/Bye.\n";
return 0;
}
C++ source from: C++ primer Plus 5 Edition.
Complie Error: "operator >>" not implemented in type 'istream' for
arguments of type "STRING" in function main()
//mystring.h
#ifndef MYSTRING_H_
#define MYSTRING_H_
#include <iostream.h>
using std:
using std::istream;
class STRING
{
private:
char *str;
int len;
static int num_strings;
static const int CINLIM=80;
public:
STRING(const char *s); //constructor
STRING(); //default constructor
STRING(const STRING &);// copy constructor
~STRING();
int length()const { return len; }
//overload operator methods
STRING &operator=(const STRING &);
STRING &operator=(const char *);
char &operator[] (int i);
const char &operator[] (int i)const;
//overload operator friends
friend bool operator<(const STRING &st, const STRING &st2);
friend bool operator>(const STRING &st1, const STRING &st2);
friend bool operator==(const STRING &st, const STRING &st2);
friend ostream &operator<<(ostream &os, const STRING &st);
friend istream &operator>>(istream *is, STRING &st);
//static function
static int HowMany();
};
#endif
//mystring.cpp
#include <cstring.h>
#include <string.h>
#include "mystring.h"
using std::cin;
using std::cout;
int STRING::num_strings=0;
int STRING::HowMany()
{
return num_strings;
}
//class methods
STRING::STRING(const char *s)
{
len=std::strlen(s);
str=new char[len+1];
std::strcpy(str,s);
num_strings++;
}
STRING::STRING()
{
len=4;
str=new char[1];
str[0]='\0';
num_strings++;
}
STRING::STRING(const STRING &st)
{
num_strings++;
len=st.len;
str=new char[len+1];
std::strcpy(str,st.str);
}
STRING::~STRING()
{
--num_strings;
delete [] str;
}
//overload operator methods
//assign a STRING to a STRING
STRING & STRING:
{
if(this==&st)
return *this;
delete [] str;
len=st.len;
str=new char[len+1];
std::strcpy(str, st.str);
return *this;
}
// assign a C string to a string
STRING &STRING:
{
delete [] str;
len=std::strlen(s);
str=new char[len+1];
std::strcpy(str,s);
return *this;
}
char &STRING:
{
return str;
}
const char &STRING:
{
return str;
}
bool operator<(const STRING &st1, const STRING &st2)
{
return (std::strcmp(st1.str, st2.str)<0);
}
bool operator>(const STRING &st1, const STRING &st2)
{
return st2.str<st1.str;
}
bool operator==(const STRING &st1, const STRING &st2)
{
return (std::strcmp(st1.str, st2.str)==0);
}
ostream &operator<<(ostream &os, const STRING &st)
{
os<<st.str;
return os;
}
istream & operator>> (istream & is, STRING &st)
{
char temp[STRING::CINLIM];
is.get(temp, STRING::CINLIM);
if(is)
st=temp;
while(is && is.get()!='\n')
continue;
return is;
}
//mysaying.cpp
#include <iostream.h>
#include "mystring.h"
const int ArSize=10;
const int MaxLen=81;
int main()
{
using std::cout;
using std::cin;
using std::endl;
STRING name;
cout<<"Hi, what's your name?\n>>";
cin >> name;
cout<<name<<", please enter up to "<<ArSize
<<"short sayings<empty line to quit>:\n";
STRING sayings[ArSize];
char temp[MaxLen];
int i;
for(i=0;i<ArSize;i++)
{
cout<<i+1<<": ";
cin.get(temp,MaxLen);
while(cin &&cin.get()!='\n')
continue;
if(!cin||temp[0]=='\n') //empty line
break;
else
sayings=temp; //overload assignment
}
int total=i;
cout<<"Here are you sayings:\n";
for(i=0;i<total;i++)
cout<<sayings[0]<<": "<<sayings<<endl;
int shortest=0;
int first=0;
for(i=1;i<total;i++)
{
if(sayings.length()<sayings[shortest].length())
shortest=i;
if(sayings<sayings[first])
first=i;
}
cout<<"Shortest saying:\n"<<sayings[shortest]<<endl;
cout<<"First aphabetically:\n"<<sayings[first]<<endl;
cout<<"This program used "<<STRING::HowMany()
<<"STRING objects/Bye.\n";
return 0;
}