非助手<<运算符不工作C ++

时间:2015-09-15 22:25:42

标签: c++ operator-overloading

我试图为显示功能调用重载<< operator。 继承我的代码:

#include <iostream>
#include <cstring>
using namespace std;
// global variable
const int MAX = 3;

// class definition 
class CString{
    char str[MAX+1];
public:
    CString(char* param){
       if(param == nullptr){
       str[0] = '\0';
       return;
       }
       strncpy(str,param,MAX);
       str[MAX] = '\0';
    }
    void display(ostream& os){
       os << str;
    }
};

// << operator overloading 
ostream& operator << (ostream& os, CString& cs){
    static int call = 0;
    os << call << ": ";
    cs.display(os);
    call++;
    return os;
}

void process(char* parm){
    CString cs(parm);
    // here is where my issue is
    cs.display(cout);
    cout << endl;
}

//----------------------------------------------------------------
int main(int argc,char *argv[]){

    cout << "Command Liine : ";
    for(int arg = 0; arg < argc ; arg++){
        cout << " " << argv[arg];
    }
    cout << endl;
    if( argc == 1){
        cout << "Insufffiecentnumber of arguemnts (min1)" << endl;
        return 1;
    }
    cout << " Maxium numver of characters stored: " << MAX << endl;
    for(int arg = 1; arg < argc; arg++){
        process(argv[arg]);
    }
    return 0;
}

编辑: 这是正确的输出和输出:

  Correct:
    Command Line : w1 oop345 btp305
    Maximum number of characters stored : 3
    0: oop
    1: btp
  Mine:
    Command Line : w1 OOP345 DBS305
    Maxium number of characters stored: 3
    OOP
    DBS

我的<< operator无法解决问题,我似乎无法弄明白。 ostream& operator<<(ostream& os, CString& cs)似乎没有加载其语法。

问题:

有谁知道我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

您写了<< operator的正确重载,但在方法process()中,您使用了类display()的公共方法CString,而不是直接使用<< operator

只需更改方法process()中的一行:

cs.display(cout);来:cout << cs;

void process(char* parm){
    CString cs(parm);
    // here is where my issue is
    cout << cs;
    cout << endl;
}

P.S。您根本不需要方法CString::display,因为您已为此类重载<< operator