Привет, я пытаюсь изменить содержимое моего vec, переданного в качестве ссылки, я довольно новичок в этой концепции и не вижу, что не так с моим кодом:
std::string pluralize(std::string const& word) {
if (uncountables.count(word) > 0) {
return word;
}
for (auto const& r : rules) {
if (r.matches(word)) {
return r.pluralize(word);
}
}
// The last rule is fully generic "append s" rule, so we cannot
// get here unless something is seriously wrong.
throw std::runtime_error("Word '" + word + "' did not match any rule");
}
std::vector<std::string> pluralize(std::vector<std::string> const& words) {
for (auto word : words) {
word = pluralize(word);
std::cout << word << " word from pluralize called with vec" << std::endl;
}
std::cout << words[0] << " 0 word from pluralize called with vec" << std::endl;
std::cout << words[1] << " 1 word from pluralize called with vec" << std::endl;
return words;
}
Когда вызывается метод множественного числасо строкой в качестве параметра, она работает как ожидалось: изменяя значение переданного слова.При вызове с помощью vec он не меняет значения передаваемых строк.Вот мои тесты:
Код отлично работает для этих тестов:
SECTION("Respects capitalization") {
REQUIRE(pluralize("Car") == "Cars");
REQUIRE(pluralize("Mouse") == "Mice");
REQUIRE(pluralize("German") == "Germans");
}
Эти тесты не пройдены:
REQUIRE(
pluralize({"Car", "Mouse", "German"}) == make_vec({"Cars", "Mice", "Germans"})
);