今天女朋友问我那错了,我一看,好长啊,就难得看了,然后她去问别人,还是没结果。中午又来问我。-_-伤不起
他的错误是没有构造函数,所以编译器会出现错误;
源代码如下:
#include <iostream.h> #include<string> class String { char string1; char string2; public: String(char st1,char st2) { string1=st1; string2=st2; } friend void inputstring(String &str); friend String strcat(String& s1,String &s2); friend String strcpy(String& s1,String &s2); friend String strcmp(String& s1,String &s2); friend void outputstring(String &str); }; void inputstring(String &str) { cin>>str.string1; cin>>str.string2; } String strcat(String& s1,String &s2) { String s; s=strcat(s1,s2); return s; } String strcpy(String& s1,String &s2) { String s; s=strcpy(s1,s2); return s; } String strcmp(String& s1,String &s2) { String s; s=strcmp(s1,s2); return s; } void outputstring(String &str) { cout<<"("<<str.string1<<","<<str.string2<<")"; } void main() { String s1,s2; cout<<"请输入第一个字符串:"<<endl; inputstring(s1); cout<<"请输入第二个字符串:"<<endl; inputstring(s2); }
因为错误,所以编译器显示:no appropriate default constructor available
原因是没有缺省构造函数,而且其中的String()里面已经有了参数,所以系统不能给他自动构造一个
所以我改了如下:
#include <iostream.h> class String { char string1; char string2; public: String() { char st1,char st2; string1=st1; string2=st2; } ~String() {} friend void inputstring(String &str); friend String strcat(String& s1,String &s2); friend String strcpy(String& s1,String &s2); friend String strcmp(String& s1,String &s2); friend void outputstring(String &str); }; void inputstring(String &str) { cin>>str.string1; cin>>str.string2; } String strcat(String& s1,String &s2) { String s; s=strcat(s1,s2); return s; } String strcpy(String& s1,String &s2) { String s; s=strcpy(s1,s2); return s; } String strcmp(String& s1,String &s2) { String s; s=strcmp(s1,s2); return s; } void outputstring(String &str) { cout<<"("<<str.string1<<","<<str.string2<<")"; } void main() { String s1,s2; cout<<"请输入第一个字符串:"<<endl; inputstring(s1); cout<<"请输入第二个字符串:"<<endl; inputstring(s2); }
所以能够运行,没有出错,但是女朋友还是没有得到结果,因为他其他地方写错了,只能说不够细心,我在这只是提下编译器显示错误原因;对于改正吗,我就让她自己搞了。
大牛勿喷,小白一个。
时间: 2024-11-07 18:25:36