469,906 Members | 2,211 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,906 developers. It's quick & easy.

please help me to solve this problem, thanks. I am newcomer to C++

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::ostream;
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::operator=(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::operator=(const char *s)
{
delete [] str;
len=std::strlen(s);
str=new char[len+1];
std::strcpy(str,s);
return *this;
}
char &STRING::operator[] (int i)
{
return str[i];
}
const char &STRING::operator[] (int i)const
{
return str[i];
}
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[i]=temp; //overload assignment
}
int total=i;
cout<<"Here are you sayings:\n";
for(i=0;i<total;i++)
cout<<sayings[i][0]<<": "<<sayings[i]<<endl;
int shortest=0;
int first=0;
for(i=1;i<total;i++)
{
if(sayings[i].length()<sayings[shortest].length())
shortest=i;
if(sayings[i]<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;
}

Jan 29 '07 #1
2 1910
Simon wrote:
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::ostream;
using std::istream;
Putting 'using' in headers is no-no, it gets dragged into any file that
includes the header.
class STRING
Avoid all caps for class names, the idiomatic use for all caps is for
macros.

<snip>
friend istream &operator>>(istream *is, STRING &st);
^^
There's your problem, should be istream&.
//static function
Silly comment!
static int HowMany();
};
--
Ian Collins.
Jan 29 '07 #2
Simon wrote:
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>
Non-standard include. You should use
#include <iostream>

Actually, since you never use a full iostream, just references, you
should use

#include <iosfwd>
>
using std::ostream;
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::operator=(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::operator=(const char *s)
{
delete [] str;
len=std::strlen(s);
str=new char[len+1];
std::strcpy(str,s);
return *this;
}
char &STRING::operator[] (int i)
{
return str[i];
}
const char &STRING::operator[] (int i)const
{
return str[i];
}
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[i]=temp; //overload assignment
}
int total=i;
cout<<"Here are you sayings:\n";
for(i=0;i<total;i++)
cout<<sayings[i][0]<<": "<<sayings[i]<<endl;
int shortest=0;
int first=0;
for(i=1;i<total;i++)
{
if(sayings[i].length()<sayings[shortest].length())
shortest=i;
if(sayings[i]<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;
}
Jan 29 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Tony Wainwright | last post: by
23 posts views Thread by Jason | last post: by
8 posts views Thread by Ricardo Sta. Rita | last post: by
5 posts views Thread by settyv | last post: by
1 post views Thread by shapper | last post: by
1 post views Thread by Waqarahmed | last post: by
reply views Thread by Salome Sato | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.