重载<<错误

时间:2014-03-24 06:13:30

标签: c++ operators overloading

我是从传统turbo c ++迁移到VS C ++ 2012的编程的新手,我很难赶上,我想模仿TC的字符串库。但我不能使插入操作符在此代码中工作....请帮助Out。你能说出我在这段代码中犯的错误吗?还有为什么我们通过引用返回对象进行重载。

#include<iostream>
#include<string>

namespace String
{
class string
{
   char word[100];
   int size;


public:
    string()
    {
        size=0;
    }
    string(int sz)
    {
        size=sz;
    }
    string(char *Word)
    {
        strcpy(word,Word);
        size=sizeof(*Word);
    }
    ~string()
    {
    }
    string &operator+(string Add)
    {
        strcat(word,Add.word);
        return *this;
    }

    string &operator=(char *Word)
    {
        strcpy(word,Word);
        return *this;
    }
/*
    ostream &operator<<(ostream &sout,string Show)
    {
        sout<<Show.word;

        return sout;
    }
*/
    void Show()
    {
        std::cout<<word;
    }
};
}

 void main()
{
String::string A="ABCDEF";
String::string B="GHIJK";
String::string C;

C=A+B;

C.Show();
std::cin.ignore(2);
//std::cout<<C;
}

2 个答案:

答案 0 :(得分:0)

你应该声明operator&lt;&lt;作为非成员函数,因为ostream将被视为operator<<的第一个参数,用户定义类型的成员函数无法满足它。

namespace String
{
    class string
    {
        ...
        public:
            ostream& put(ostream &sout) { sout << word; return sout; }
    };

    ostream& operator<<(ostream& sout, string Show) { return Show.put(sout); }
}

答案 1 :(得分:0)

输出操作符<<必须在命名空间中重载,而不是类本身,如果你想能够像这样使用它:

cout << my_class_object;

因此,在您的班级声明(string.h)中添加以下行:

ostream &operator<<(ostream & sout,const string & Show);

然后在您的命名空间中的定义文件(string.cpp中,而不是类本身,ad this function:

ostream & operator<<( ostream & out, const bigint & data )
{
    // the printing implementation
}