Получение RWBoundsErr при чтении текстового файла с использованием RWCString в переполнении стека

Следующий код дает мне 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_ имеют путь к входным / выходным текстовым файлам

Пример содержимого текстового файла

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

Обратите внимание, что в конце каждой строки есть пробел

Несмотря на то, что я нашел решение этой проблемы, я хотел бы понять, почему этот код не работает.

0

Решение

Посмотрите на документацию, связанную с operator<<() оператор для 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 ошибка.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]