简体   繁体   中英

how I can overcome this error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'const char []'

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <cstring>

void initialize(char[],int*);
void input(const char[] ,int&);
void print ( const char*,const  int);
void growOlder (const char [], int* );

bool comparePeople(const char* ,const int*,const char*,const int*);

int main(){

  char name1[25];
     char name2[25];
     int age1; 
  int age2;


 initialize (name1,&age1);
 initialize (name2,&age2);

 print(name1,age1);
 print(name2,age2);

 input(name1,age1);
 input(name2,age2);

 print(name1,age1);
 print(name2,age2);

 growOlder(name2,&age2);

 if(comparePeople(name1,&age1,name2,&age2))
    cout<<"Both People have the same  name and age "<<endl;
 return 0;
}

void input(const  char name[],int &age)
{
 cout<<"Enter a name :";
 cin>>name ;

 cout<<"Enter an age:";
 cin>>age;
 cout<<endl;
}

void initialize ( char name[],int *age)
{
 name[0]='\0'; 
 *age=0; }
void print ( const char name[],const int age )
{
 cout<<"The Value stored in variable name is :"
   <<name<<endl
  <<"The Value stored in variable  age is :"
   <<age<<endl<<endl;
}

void growOlder(const char name[],int *age)
{
 cout<< name <<" has grown one year older\n\n";
 *age++;
}
bool comparePeople (const char *name1,const int *age1,
     const char *name2,const int *age2)
{

return(*age1==*age2 && !strcmp(name1,name2));

}

The name parameter of your input() function is a pointer to const char . const means you can't modify it, so if you need to modify it, it needs not to be const.

That said, to really fix it, use std::string wherever you currently use char[] s and char* s and consider returning objects instead of using out-parameters; this will make your code much less error prone and easier to follow and understand.

The symbol '>>' is an operator. The writer of the String class included this operator to only take primitive types and of course the String class type.

You have two options:

  1. Convert the char array to a string
  2. Overload the '>>' operator to take char arrays and output it as you like

Look up overloading operator if you really want to have fun.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM