注册 登录
编程论坛 C++教室

请教自己字符串类的问题

ringlord 发布于 2012-04-18 18:53, 764 次点击
要求实现自己的MyString2类,实现这样的函数MyString2(char chars[], int size);
假如头文件(MyString.h)是这样:
#include <iostream>
#include <cstring>
using namespace std;
class MyString2
{
public:
    MyString2(char chars[], int size);
private:
    char *s;
    int length;
   
};

头文件的实现文件是这样:
#include "MyString2.h"
#include <cstring>
#include <iostream>
using namespace std;

MyString2::MyString2(char chars[], int size)
{
    s = new char[size];
    for (int i = 0; i < size - 1; i++)
        s[i] = chars[i];
    s[size] = '\0';   
};


主函数是这样:
#include <iostream>
#include "MyString2.h"
#include <cstring>
using namespace std;

int main()
{
    char chars[4] = "abc";
    MyString2 s(chars, 4);
    cout << s << endl;
    return 0;
}

请问这个哪里出错了呢,不能直接显示s吗?谢谢了
11 回复
#2
寒风中的细雨2012-04-18 19:13
运算符重载 ostream &operator<<(ostream &out, const MyString2 &obj);
#3
寒风中的细雨2012-04-18 19:19
程序代码:
#include <iostream>
#include <cstring>
using namespace std;

class MyString2
{
public:
    MyString2(char chars[], int size);
    friend ostream& operator << (ostream &out, const MyString2& obj);
private:
    char *s;
    int length;
};

MyString2::MyString2(char chars[], int size)

 {
     s = new char[size];
     for (int i = 0; i < size - 1; i++)
         s[i] = chars[i];
     s[size] = '\0';  
}

ostream& operator << (ostream &out, const MyString2& obj)
{
    return out << obj.s;
}

int main()
{
    char chars[4] = "abc";

    MyString2 s(chars, 4);

    cout << s << endl;

    return 0;
}
#4
ringlord2012-04-18 20:54
回复 2楼 寒风中的细雨
真的非常感谢啊
可以编译通过了,运行出错,error C2664: 'MyString2::MyString2(const MyString2 &)' : cannot convert parameter 1 from 'char *' to 'const MyString2 &'
        Reason: cannot convert from 'char *' to 'const MyString2'
        No constructor could take the source type, or constructor overload resolution was ambiguous

[ 本帖最后由 ringlord 于 2012-4-18 21:01 编辑 ]
#5
寒风中的细雨2012-04-18 22:17
回复 4楼 ringlord
我用的是vs2008
#6
寒风中的细雨2012-04-18 22:20
程序代码:
#include <iostream>
#include <cstring>
using namespace std;

class MyString2

 {

 public:
     MyString2(char chars[], int size);
     friend ostream& operator << (ostream &out, const MyString2& obj);
     {
        return out << obj.s;
     }

 private:
     char *s;
     int length;

 };

MyString2::MyString2(char chars[], int size)

 {
      s = new char[size];
      for (int i = 0; i < size - 1; i++)
          s[i] = chars[i];
      s[size] = '\0';

 }

/*
ostream& operator << (ostream &out, const MyString2& obj)

 {
     return out << obj.s;

 }
*/

int main()

 {
     char chars[4] = "abc";

    MyString2 s(chars, 4);

    cout << s << endl;

    return 0;

 }
#7
寒风中的细雨2012-04-18 22:20
回复 6楼 寒风中的细雨
vc6.0中可以
#8
lyswwr2012-04-18 22:58
#include <iostream>
#include <cstring>
using namespace std;
这几句在头文件中不用出现,只出现在.cpp文件就可啊;
#9
寒风中的细雨2012-04-18 23:26
我 没弄头文件    就一个.cpp   
#10
飞扬冲天2012-04-19 20:18
应该行啊,我试了一下
#11
飞扬冲天2012-04-19 20:19
回复 6楼 寒风中的细雨
请教一下,为什么重载<<那个函数必须在类里面定义,而在外面却不行呢?
#12
寒风中的细雨2012-04-19 22:12
回复 11楼 飞扬冲天
vs可以  vc6.0不清楚为什么
1