- 论坛徽章:
- 0
|
本帖最后由 andy_hqj 于 2013-11-05 17:51 编辑
首先附上代码
1、str.h
class String
{
char * data;
public:
String(char * str);
String(String &s);
~String();
String & operator=(String &s);
String operator+(String &s);
};
2、str.cpp
#include <iostream>
#include "str.h"
#include <string.h>
using namespace std;
String::String(char *str)
{
data=new char[strlen(str)+1];
strcpy(data, str);
}
String::String(String &s)
{
data=new char[strlen(s.data)+1];
strcpy(data, s.data);
}
String::~String()
{
delete [] data;
}
String & String:: operator=(String &s)
{
if(this == &s)
return *this;
delete [] this->data;
this->data = new char[strlen(s.data)+1];
strcpy(this->data,s.data);
return *this;
}
String String:: operator+(String &s)
{
String tmp( "" );
delete [] tmp.data ;
tmp.data = new char[strlen(data)+strlen(s.data)+1];
strcpy(tmp.data, data);
strcat(tmp.data, s.data);
return tmp;
}
3、测试函数 main.cpp
#include <iostream>
#include "str.h"
using namespace std;
int main()
{
String s("hello" );
String s1("world" );
String s3("" );
s3 = s + s1;
return 0;
}
错误:
1、String s3("" );
s3 = s + s1;
编译错误为:
main.cpp: In function ‘int main()’:
main.cpp:10: 错误:no match 为 ‘operator=’ 在 ‘s3 = String:: operator+(String& ) (((String& ) (& s1)))’ 中
str.h:9: 附注:备选为: String& String:: operator=(String& )
2、如果写成 String s3=s+s1;
编译错误为:
main.cpp:9: 错误:对 ‘String::String(String)’ 的调用没有匹配的函数
str.h:7: 附注:备选为: String::String(String& )
str.h:6: 附注: String::String(char*)
但如果把重载+法运算符号的返回值改为引用,这两种方法都没问题(当然会提示返回局部变量地址)
那位帮忙解释一下,这两个错误的原因,我的环境为as5 gcc |
|