مشکل در override کردن >> برای خروجی cout
سلام دوستان من کد زیر را نوشتم که از خط زیر ایراد می گیرد
ostream& String::operator<<(ostream& stream,const String& str){
کل کد
#include <iostream>
#include <cstring>
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class String{
char *ch;
public:
String();
String operator=(char* ob);
String operator+(String str);
char * toString();
friend ostream& operator<<(ostream& stream,const String& str);
};
String::String(){
}
String String::operator=(char* ob){
ch=ob;
return *this;
}
String String::operator+(String str){
String temp;
temp.ch=strcpy(ch,str.ch);
return temp;
}
ostream& String::operator<<(ostream& stream,const String& str){
stream<<str.ch;
return stream;
}
char * String::toString(){
return ch;
}
int main(int argc, char *argv[]) {
String str1,str2,str3;
str1="ehsan";
str2="shahbakhty";
cout<<str2;
return 0;
}
خطای زیر تولید می شود :
[Error] 'std::ostream& String::operator<<(std::ostream&, const String&)' must take exactly one argument
نقل قول: مشکل در override کردن >> برای خروجی cout
متن خطا میگه "اوپراتور >> باید دقیقا یک پارامتر بپذیرد" که منطقی هم هست!
نقل قول: مشکل در override کردن >> برای خروجی cout
بله پبغام خودم خوندم ! خوب راه حل چیه ؟ من می خواهم این >> را پیاده سازی کنم ؟
پس احتمالا این لینک هم میکروسافت غیر منطقی رفته :
http://msdn.microsoft.com/en-us/library/1z2f6c2k.aspx
نقل قول: مشکل در override کردن >> برای خروجی cout
این راه مایکروسافت یک تابع خارج از کلاس است. اما تابع شده داخل کلاس است. در مورد اوپراتورهایی که داخل کلاس هستند یک طرف اوپریت خود کلاس در نظر گرفته میشود.
من نمیدونم شما باید چطور این متد را پیاده سازی کنید، چون نمیدانم قرار است از نظر منطقی چه اتفاقی در آن بیفتد. لطفا بفرمایید چه کاری قرار است این تابع انجام دهد؟
نقل قول: مشکل در override کردن >> برای خروجی cout
خط ۱۶ رو ببرید بالای عبارت public (یعنی قبل از پابلیک)درست میشه....!
نقل قول: مشکل در override کردن >> برای خروجی cout
سلام
ostream& operator<<(ostream& stream,const String& str){
stream<<str.ch;
return stream;
}
قراره اپراتور موجود در کلاس ostream دوباره override بشه نه اپراتور موجود در کلاس string
وقتی به عنوان friend اعلان کردید یعنی این اپراتور عضوی از کلاس ostream هست و قراره به اعضای private کلاس String دسترسی داشته باشه
پس هنگام تعریف این اپراتور دقت کنید این اپراتور عضوی از کلاس ostream هست
نقل قول: مشکل در override کردن >> برای خروجی cout
نقل قول:
نوشته شده توسط
java4me
خط ۱۶ رو ببرید بالای عبارت public (یعنی قبل از پابلیک)درست میشه....!
اوپراتوری که private باشه اوپراتور نیست!
نقل قول: مشکل در override کردن >> برای خروجی cout
داخل کد شما اپراتور بصورت عضوی از کلاس تعریف شده .
شما باید اپراتور گلوبال >> رو overload کنی اون operator ای که نوشتی عضو کلاس هست و برای این استفاده میشه >>String
این جا هم قبلا بحث شده بود : نوشتن یک کلاس بوسیله cout