gpt4 book ai didi

c++ - 尝试编译C++代码时出现歧义错误

转载 作者:行者123 更新时间:2023-12-02 11:00:25 25 4
gpt4 key购买 nike

当尝试编译下面的代码时,出现三个错误。

  • 'iterator_category':不是'std::iterator_traits <_InIt>'
  • 任何直接或间接基类的成员
  • '_Iter_cat_t':无法专门化别名模板
  • 类型“未知类型”意外的

  • 我对C++还是很陌生,并且已经多次更改代码段,但没有帮助。感谢您对破译这些错误消息的任何帮助。
    #include "../../std_lib_facilities.h"

    class Puzzle {
    public:
    vector<char> letters;
    Puzzle(int my_size);
    void generate(void);
    void enter_letters(void);
    void feedback(Puzzle puzzle);

    private:
    int size = 4;
    };

    Puzzle::Puzzle(int my_size)
    {
    size = my_size;
    }

    //Generate size unique letters for the letters array.
    void Puzzle::generate(void)
    {
    for (int i = 0; i < size; ++i) {
    char rand = randint(26) - 1 + 'a';
    while ((find(letters[0], letters[size], rand) != letters[size])) {
    rand = randint(26) - 1 + 'a';
    }
    letters[i] = rand;
    }
    }

    //Let the user enter size unique letters.
    void Puzzle::enter_letters(void)
    {
    cout << "Enter four different letters seperated by spaces:\n";
    for (int i = 0; i < size; ++i) {
    char letter;
    cin >> letter;
    letters[i] = letter;
    }
    }

    //Tell the user how many bulls and cows they got.
    void Puzzle::feedback(Puzzle puzzle)
    {
    int cows = 0, bulls = 0;

    for (int i = 0; i < size; i++) { //input
    for (int j = 0; j < size; ++j) { //puzzle
    if (i == j && letters[i] == puzzle.letters[j]) {
    ++bulls;
    break;
    }
    else if (letters[i] == puzzle.letters[j]) {
    ++cows;
    break;
    }
    }
    }
    cout << "Bulls: " << bulls << "\nCows: " << cows << "\n";
    }

    //Seed the random function.
    void seed(void)
    {
    int sum = 0;
    cout << "Enter a random string of characters:\n";
    string str;
    cin >> str;
    for (char& c : str)
    sum += c;
    srand(sum);
    }

    int main()
    {
    constexpr int GAME_SIZE = 4;
    seed();

    Puzzle puzzle(GAME_SIZE);
    puzzle.generate();
    Puzzle input(GAME_SIZE);

    input.enter_letters();
    while (puzzle.letters != input.letters) {
    input.feedback(puzzle);
    input.enter_letters();
    }
    cout << "Congragulations, you did it!\n";

    keep_window_open();
    return 0;
    }

    最佳答案

    您使用的find()错误。

    find(letters[0], letters[size], rand)

    您的 lettersstd::vector。您正在将 vector 中的第一个值和 vector 中的最后一个值传递给 std::find

    这实际上是未定义的行为,因为 size并不总是 letters vector 的实际大小。因此,除了编译错误之外,您还会得到一个随机崩溃,这是额外的好处。
    std::find are iterators of a sequence to search的前两个参数,而不是值。

    应该是:
    find(letters.begin(), letters.end(), rand)

    同样,您的整体算法也被破坏了。一旦 letters达到一定大小,您的随机数生成代码将需要...大量时间才能找到要添加到 letters的新字母(尚未使用)。一旦 letters设法获取字母表的所有26个字符,这将变成无限循环。但这将是一个不同的问题...

    关于c++ - 尝试编译C++代码时出现歧义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436764/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com