运行 这个方法的 C++ 主方法驱动程序有什么问题?

What is wrong with this C++ main method driver to run this method?

我这学期正在做 C++(刚学完 Java),并使用 Codewars 进行一些练习(这是我最有效的练习方式,但它只需要方法而不需要驱动程序)我的 C++ 编码,但不确定如何为此方法创建驱动程序,因此我可以在我的 IDE.

中练习

我在这里遗漏了什么所以它在我的 IDE 中运行?解决方案(不是我的代码)有效,但我的主要方法没有驱动它。

#include <iostream>
#include <cctype>
#include <unordered_set>

int main(int argc, char *argv[]) {
using namespace std;
cout << is_isogram("Dermatoglyphics"); //error: use of undeclared identifier 'is_isogram'
}

bool is_isogram(std::string str) { //warning: Function is never used
std::unordered_set<char> char_set;
for (const auto &c : str) {
    auto c_lower = std::tolower(c);
    if (char_set.count(c_lower) == 0) char_set.insert(c_lower);
    else return false;
}
return true;
}

在你尝试 use is_isogram() in main() 的时候,它实际上还没有被声明,因此“使用未声明的标识符" (a).

您可以通过两种方式之一解决这个问题,第一种是在使用前用函数原型声明它,例如:

bool is_isogram(std::string);           # declare
int main(int argc, char *argv[]) {      # define
    // main stuff
}
bool is_isogram(std::string str) {      # define
    // is_isogram stuff
}

第二个是交换 is_isogram()main() 以便声明作为定义的一部分完成(定义某些内容隐式声明它):

bool is_isogram(std::string str) {      # define
    // is_isogram stuff
}
int main(int argc, char *argv[]) {      # define
    // main stuff
}

(a) 报告的第二个问题“未使用函数”几乎可以肯定只是第一个问题的 side-effect。因为编译器无法对来自 main()is_isogram() 调用做任何事情,它只是在报告错误后将其丢弃。因此,现在没有代码在您定义函数时调用它。