#c
#c
Вопрос:
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
void test();
void test() { //my attempted test function in order to ensure the program works correctly
string answ1 = "noooooob";
string answ2 = "saaaaaadie";
string answ3 = "trish";
assert(answer(answ1) == "nob"); //this is where i get the compile error that "answer" not declared
assert(answer(answ2) == "sadie");
assert(answer(answ3) == "trish");
cout << "All test cases passed!" << endl;
}
int main() {
int i = 0;
string output;
string input;
char x;
getline(cin, input); //input
output = input[0];
x = input[0];
while (i < input.length()) {
i ;
if (input [i] != x) {
output = input[i];
}
x = input[i];
}
cout << output << endl;
test();
return 0;
}
Все, что я действительно спрашиваю, это как объявить переменную «answer» в функции assert. Возможно, я делаю это совершенно неправильно, и мои извинения, если это так. Я довольно новичок в области кодирования. Нужно ли мне создавать строку, которая будет проходить через текущий цикл for в моей основной функции? Любая помощь приветствуется.
Комментарии:
1. Прежде всего, заголовочные файлы не являются «библиотеками». Библиотеки могут иметь заголовочный файл, и есть некоторые библиотеки только для заголовков, которые имеют только заголовочные файлы, но они все еще являются заголовочными файлами и не часто называются «библиотекой».
2. Что вы хотите
answer
иметь в виду? Вы называете это переменной, но используете ее как функцию. (или, возможно, конструктор) Другими словами — что вы на самом деле пытаетесь протестировать ?3. Во-вторых,
assert
это макрос, который обычно отключается в сборках типа release. Никогда не следует использоватьassert
для проверки вне отладки. Кроме того,assert
приведет к сбою программы, что не очень удобно для пользователя.4. Я настоятельно рекомендую использовать среду модульного тестирования, такую как Google Test или Boost unit test framework, вместо макроса assert. Это позволит вам выполнять тесты в не отладочных конфигурациях в дополнение к предоставлению выходных данных, не зависящих от компилятора.
5. И
answer(answ1)
не имеет смысла, особенно как часть assert . Что это вообще должно означать? Что такоеanswer
?
Ответ №1:
- Либо вы забыли включить заголовок, в котором вы определяете класс или функцию с именем
answer
- или вам это не нужно, и вы просто добавляете строки:
assert(answ1 == "nob"); // operator== kicks in
assert(answ2 == "sadie");
assert(answ3 == "trish");
Вы должны знать, что assert
это функция только для отладки. Он ни к чему не компилируется в режиме выпуска.
Вероятно, вам следует пересмотреть свой подход к модульному тестированию, как предполагают комментарии (GTest подойдет).