| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 553 人关注过本帖
标题:自定义String类,代码哪错了
只看楼主 加入收藏
zheng3912930
Rank: 1
等 级:新手上路
帖 子:15
专家分:2
注 册:2011-11-10
结帖率:66.67%
收藏
 问题点数:0 回复次数:3 
自定义String类,代码哪错了
#include<iostream>
using namespace std;
class String{
    private:
    char * m_Data;
    public:
    String(const char * s=NULL );
    String(const String & s);
    String & operator =(const char *);
    friend ostream& operator <<(ostream &stream,String str);
    ~String();
};
String::String(const char * s)
{
    if(s==NULL)
    {
        m_Data=new char[1];
        m_Data='\0';
    }
    else
    {
        int len=strlen(s);
        m_Data=new char[len+1];
        strcpy(m_Data,s);
    }
}
String::String(const String &s)
{
    /*if(*this==s)
      return s;
    else
    {*/
    int length=strlen(s.m_Data);
    m_Data=new char[length+1];
    strcpy(m_Data,s.m_Data);
}

String & String::operator =(const char *s)
{
    if(s==NULL)
    {
        m_Data=new char[1];
        m_Data='\0';
    }
    else
    {
        int len=strlen(s);
        m_Data=new char[len+1];
        strcpy(m_Data,s);
    }
   
}
String::~String()
    {
        delete [] m_Data;
    }
ostream& operator <<(ostream &stream,String str)
{
    stream<<str.m_Data;
    return stream;
}
int main()
{
    String s;
    String s1("nihao!");
    String s2(s1);
    String s3="en!";
    cout<<s1<<' '<<s2<<endl;
    cout<<s3;
    return 0;
}(为什么有错误)
C:\Documents and Settings\Administrator\cq.cpp(59) : error C2248: 'm_Data' : cannot access private member declared in class 'String'
        C:\Documents and Settings\Administrator\cq.cpp(5) : see declaration of 'm_Data'
C:\Documents and Settings\Administrator\cq.cpp(68) : error C2593: 'operator <<' is ambiguous
C:\Documents and Settings\Administrator\cq.cpp(69) : error C2593: 'operator <<' is ambiguous
搜索更多相关主题的帖子: include private public friend stream 
2012-07-19 21:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
首先,换个编译器,这是最重要的。

关于代码的错误
1。缺少#include <cstring>
别说某个编译器中有了#include <iostream>就行,C++标准可没有这么规定
2。friend ostream& operator <<(ostream &stream,String str);
改为 friend ostream& operator <<(ostream &stream, const String& str);
否则多一次拷贝赋值
3。String & String::operator =(const char *s) 中原本的m_Data指向的内存没得到释放,且缺少return *this;
4。缺少String& String::operator=(const String& s),将会进行浅拷贝
2012-07-20 08:27
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
rjsp 果然既认真又敬业。
2012-07-20 21:35
一只小蚂蚁
Rank: 2
等 级:论坛游民
威 望:2
帖 子:19
专家分:92
注 册:2012-6-19
收藏
得分:0 
默认构造指针给NULL吧 申请一字节空间何必呢
2012-07-22 01:16
快速回复:自定义String类,代码哪错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018334 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved