Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > please help me to solve this problem, thanks. I am newcomer to C++

Reply
Thread Tools

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

 
 
Simon
Guest
Posts: n/a
 
      01-29-2007
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[i];
}
const char &STRING:perator[] (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;


}

 
Reply With Quote
 
 
 
 
Ian Collins
Guest
Posts: n/a
 
      01-29-2007
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:stream;
> 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.
 
Reply With Quote
 
 
 
 
red floyd
Guest
Posts: n/a
 
      01-29-2007
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: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[i];
> }
> const char &STRING:perator[] (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;
>
>
> }
>

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Help -- Newcomer with region problem ? PJ DVD Video 1 05-29-2006 04:47 AM
Newcomer to MCSE/Windows 2003 none@set.yet MCSE 3 03-14-2006 09:43 PM
SOAP server (newcomer q) Alto Java 4 12-18-2005 02:36 PM
A couple observations of a newcomer Bob D. Digital Photography 10 08-26-2003 11:23 PM
a little help for a newcomer delia martin Computer Support 4 07-10-2003 01:31 PM



Advertisments