Я пытаюсь сконструировать конструкцию, которая может проверять наличие ошибок при вводе, поэтому я написал две логические функции в тестовой программе, параметры которой являются ссылками на строки. Я надеялся, что мой оператор if оценит первую изменяющую функцию часть слова, затем снова оценит второе изменяющее функцию слово и, наконец, оценит && чтобы увидеть, печатать ли. Однако мой код не запустится, и ошибка говорит о том, что ни один операнд не соответствует << оператор для Cout, когда я пытаюсь вывести код. Мой код может объяснить лучше, чем я. Может кто-нибудь объяснить, почему это не сработает? Я использую Visual Studio 2012.
#include <iostream>
using namespace std;
bool changeString1(string &word){
word[0]='a';
return word[1]=='b';
}
bool changeString2(string &word){
word[2]='c';
return word[3]=='d';
}
int main(){
cout << "hello" << endl;
string word("cbad");
if(changeString1(word) && changeString2(word)){
cout << word << endl;
}
system("Pause");
return 0;
}
Ваша проблема, вероятно, в том, что у вас нет #include <string>
в начале вашего кода.
Порядок эвакуации &&
а также ||
выражения строго «слева направо» и гарантировано «короткое замыкание», когда выражение определяется левым операндом.
При использовании других операторов он не определен, например, if (changeString1(word) + changeString2(word))
, компилятор будет разрешено вызывать changeString2
до changeString1
,
Другими словами, когда есть &&
(и) в выражении, если первое условие ложно, второе выражение не оценивается, а если первое выражение истинно, второе вычисляется. Поскольку оба действительно верны в этом случае, оба оцениваются.
Других решений пока нет …