0

以下代码给了我RWBoundsErr错误

在抛出 'RWBoundsErr' 的实例后调用终止

bool filterData()
{       
    while(!inputFile_.eof())
    {
        currentLine_.readLine(inputFile_);        
        //outputFile_<<currentLine_(0,1)<<currentLine_(2,1)<<currentLine_(4,13)<<currentLine_(0,1)<<currentLine_(2,1)<<currentLine_(4,13)<<endl;
        outputFile_<<currentLine_[0]<<currentLine_[2]<<currentLine_(4,13)<<currentLine_[0]<<currentLine_[2]<<currentLine_(4,13)<<endl;        
    }
    return (TRUE);
}

但是,如果我改用注释掉的行,一切都会按预期工作。

currentLine_的数据类型为RWCString

outputFile_ 和 inputFile_ 具有 inout/output txt 文件的路径

文本文件的示例内容

ABCD1234567890123 2017/10/16 13:40:28 
WXYZ9876543210987 2017/10/16 13:40:28 

请注意,每行末尾都有一个尾随空格

即使我已经确定了这个问题的解决方案,我还是想了解为什么这段代码会失败。

4

1 回答 1

1

查看与operator<<()operator for相关的文档RWCString

RWvostream&
operator<<(RWvostream&, const RWCString& str);
RWFile&
operator<<(RWFile&,     const RWCString& str);
Saves string str to a virtual stream or RWFile, respectively.

RWFile

RWFile&
operator<<(RWFile&,     const RWCString& str);
Saves string str to a virtual stream or RWFile, respectively.
...
RWFile&
operator<<(RWFile&,     const RWInteger& x);
Saves the RWInteger x to a virtual stream or RWFile, respectively.

没有<<运算符会采用char.

currentLine_(0,1)是一个可以与<<运算符一起使用的子字符串

RWCSubString
operator()(size_t start, size_t len);
RWCConstSubString
operator()(size_t start, size_t len) const;

另一方面currentLine_[0]char

char&
operator[](size_t i);
char
operator[](size_t i) const;
Returns the ith byte.

在您的情况下,尝试char<<操作员一起使用会导致RWBoundsErr错误。

于 2018-02-11T13:44:38.517 回答