Во-первых, убедитесь, что getline
удалось. не оценивать его в bool
ЕАН контексте, чтобы понять это:
while (getline(myfile, temp)) {
/* code goes here */
}
вместо
do {
getline(myfile, temp);
/* code goes here */
} while (true);
Никогда, никогда не делать вход без проверки, если он не сразу, или вы получите действительно досадные ошибки, чтобы отследить ,
Во-вторых, удостоверьтесь, что temp
имеет длину не менее 1 символа. temp.size() >= 1
будет true
если можно сделать temp[0]
. Если getline
когда-либо дает вам string
длины 0, то выполнение temp[0]
приведет к неопределенному поведению. Неопределенное поведение действительно раздражает, чтобы отследить, потому что он может вести себя абсолютно безобидно в одной ситуации, а затем укусить вас в неожиданном месте позже.
В-третьих, сделать temp[0] != '='
вместо temp[0] != "="
. '='
- символ, "="
- это буфер из 2-х символов, первый из которых - '='
, второй - '\0'
. Массив из двух символов, обозначенных "="
, неявно преобразуется в указатель на первый символ, когда вы пытаетесь сделать !=
, который затем генерирует ошибку (поскольку он не знает, как сравнить указатель на символ с символом).
Уточнение (поскольку tacp продолжает редактировать свой ответ): строки (которые являются указателями на символы) заключены в двойные кавычки; отдельные символы заключены в одиночные кавычки. Следовательно, сообщение об ошибке жалуется на указатель. –
@AdamLiss спасибо. что делало вещи еще лучше и яснее. – taocp
Благодарим вас за чистый, прямой ответ. Это было очень полезно – user1082764