重载istream运算符>>使用getline会出错

时间:2018-03-19 15:28:52

标签: c++

我真的不知道为什么,但我正在与我的>>挣扎运算符让它与getline一起正常工作。 基本上,我有一个命令类,我想在其中将用户输入分配给它的chain属性,之后我想将用户输入与空格分隔为其字符串数组param

目前,我只想让第一个正常工作,对于拆分,我稍后会使用strok执行此操作。

修改

我的错误:

Commande.cpp: In function 'std::istream& operator>>(std::istream&, Commande&)':
Commande.cpp:82:39: error: no matching function for call to 'std::basic_istream<char>::getline(std::__cxx11::string&, int)'
    stream.getline(commande.chaine, 256);

Command.cpp

Command::Command() {
}

Command::Command(std::string _chain) {
    chaine = _chain;
}


Command::Command(const Command& orig) {
}

Command::~Command() {
}

std::istream& operator >> (std::istream &stream, Command& command)
{
   stream.getline(command.chain, 256); 
   return stream;
}

Command.h

#ifndef COMMAND_H
#define COMMAND_H

#include <iostream>
#include <assert.h>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include "Command.h"

public:

    std::string chain;    

    std::string param[10];

    Command();

    Command(std::string _chain); 

    Command(const Command& orig);

    virtual ~Command();

private:

    friend std::istream& operator >> (std::istream&, Command&);
};

#endif /* COMMAND_H */

Main.cpp的

include "command.h" 

int main(int argc, char** argv) {

    Command command;

    std::cin >> command;
}

1 个答案:

答案 0 :(得分:0)

我改变了我对@Thomas Mattews推荐的态度,它完美无缺。所有其他答案也竖起大拇指。

std::istream& operator >> (std::istream &stream, Command& command)
{
   std::getline(stream, command.chain);
   return stream;
}