当前位置: 首页 > 知识库问答 >
问题:

这是无效的使用

阮选
2023-03-14

这是我的echelleetserpent.hpp:

#include <vector>
#include <iostream>
#include <ctime>
#include <random>

#ifndef ECHELLE
#define ECHELLE

struct Player{
    int position;
    int n_step;
    Player(): position(0), n_step(0) {};
};

class SnakesAndLadders{
    private:
        int n_players;
        int n_board;
        std::vector<Player> players;
        std::vector<int> board;
    public:
        int roll_die(std::mt19937 &) const;
        bool one_step(std::mt19937 & G, int j);
        int game(std::mt19937);
};



#endif

还有我的蛇。cpp

#include "echelleetserpent.hpp"
#include <algorithm>

int SnakesAndLadders::roll_die(std::mt19937 & gen) const {
    std::uniform_int_distribution<int> U(1,6);
    int dice = U(gen);
    return dice;
}

bool SnakesAndLadders::one_step(std::mt19937 & G, int j) {
    int dice = roll_die(G);
    std::cout << "Le résultat du dé est : " << dice << std::endl;
    players[j].n_step++;
    players[j].position+=dice;
    return (players[j].position >= n_board) ? true : false;
}

int SnakesAndLadders::game(std::mt19937 G) {
    while (std::any_of(players.begin(), players.end(), [n_board](Player p) {return p.position < n_board;})) {
        for(int i=0; i<n_players; i++) {
            this->one_step(G,i);
        }
    }
    return std::min_element(this->players.begin(), this->players.end(), [n_board](Player p1, Player p2) {
        if(p1.position>=n_board and p2.position >= n_board) { return p1.position < p2.position; } else { return false; }});
}

我得到以下错误:

echelleetserpent.cpp: In member function ‘int SnakesAndLadders::game(std::mt19937)’:
echelleetserpent.cpp:60:54: error: capture of non-variable ‘SnakesAndLadders::n_board’ 
  while (std::any_of(players.begin(), players.end(), [n_board](Player p) {return p.position < n_board;})) {
                                                      ^~~~~~~
In file included from echelleetserpent.cpp:1:0:
echelleetserpent.hpp:18:7: note: ‘int SnakesAndLadders::n_board’ declared here
   int n_board;
       ^~~~~~~
echelleetserpent.cpp: In lambda function:
echelleetserpent.cpp:60:94: error: ‘this’ was not captured for this lambda function
 rs.begin(), players.end(), [n_board](Player p) {return p.position < n_board;})) {
                                                                     ^~~~~~~
echelleetserpent.cpp:60:94: error: invalid use of non-static data member ‘SnakesAndLadders::n_board’
In file included from echelleetserpent.cpp:1:0:
echelleetserpent.hpp:18:7: note: declared here
   int n_board;
       ^~~~~~~
echelleetserpent.cpp: In member function ‘int SnakesAndLadders::game(std::mt19937)’:
echelleetserpent.cpp:65:71: error: capture of non-variable ‘SnakesAndLadders::n_board’ 
 eturn std::min_element(this->players.begin(), this->players.end(), [n_board](Player p1, Player p2) {
                                                                     ^~~~~~~
In file included from echelleetserpent.cpp:1:0:
echelleetserpent.hpp:18:7: note: ‘int SnakesAndLadders::n_board’ declared here
   int n_board;
       ^~~~~~~
echelleetserpent.cpp: In lambda function:
echelleetserpent.cpp:66:19: error: ‘this’ was not captured for this lambda function
   if(p1.position>=n_board and p2.position >= n_board) { return p1.position < p2.position; } else { return false; }});
                   ^~~~~~~
echelleetserpent.cpp:66:19: error: invalid use of non-static data member ‘SnakesAndLadders::n_board’
In file included from echelleetserpent.cpp:1:0:
echelleetserpent.hpp:18:7: note: declared here
   int n_board;
       ^~~~~~~
echelleetserpent.cpp:66:46: error: ‘this’ was not captured for this lambda function
   if(p1.position>=n_board and p2.position >= n_board) { return p1.position < p2.position; } else { return false; }});
                                              ^~~~~~~
echelleetserpent.cpp:66:46: error: invalid use of non-static data member ‘SnakesAndLadders::n_board’
In file included from echelleetserpent.cpp:1:0:
echelleetserpent.hpp:18:7: note: declared here
   int n_board;
       ^~~~~~~
echelleetserpent.cpp: In member function ‘int SnakesAndLadders::game(std::mt19937)’:
echelleetserpent.cpp:66:116: error: cannot convert ‘__gnu_cxx::__normal_iterator<Player*, std::vector<Player> >’ to ‘int’ in return
 ion >= n_board) { return p1.position < p2.position; } else { return false; }});

错误继续:

在/usr/include/c/7/bits/stl_algobase中包含的文件中。h:71:0,来自/usr/include/c/7/vector:60,来自echelleetserpent。hpp:1,来自echelleetserpent。cpp:1:/usr/include/c/7/bits/predefined_ops。h:在'bool__gnu_cxx::_ops::_Iter_pred'的实例化中

]“/usr/include/c/7/bits/stl_algo。h:161:23:从“_iteratorstd::_find_if(_Iterator,_Iterator,_Predicate)[with _Iterator=u gnu_cxx::u normal_Iterator:u

共有1个答案

魏毅
2023-03-14

我认为,你需要捕捉到这一点。

while (std::any_of(players.begin(), players.end(), [this](Player p) {return p.position < n_board;})) {
    for(int i=0; i<n_players; i++) {
        this->one_step(G,i);
    }
}
 类似资料:
  • 我正在尝试使用Linux中的命令行工具学习XPath查询(我正在学习斯坦福大学的Class2Go数据库入门课程)。给定一个包含书籍和杂志的书店的名为Bookstore Q. xml的XML文件,我可以在命令行运行以下查询: 它将返回以下结果: 如果在命令行使用xmllint,我会得到相同的结果,如下所示: 但是,如果我尝试使用与Saxon示例中相同的精确XPath查询,则会出现如下错误: 为什么?

  • 问题内容: 我是Redis的新手(在托管服务中使用它),并希望将其用作列表的演示/沙箱数据存储。 我使用以下代码。这个对我有用。但是,对于具有几个(最多100个)并发用户(用于少量数据-最多1000个列表项)的小型网站,这是否有效(并非完全不作弊)? 我正在使用静态连接和像这样的静态redisclient类型列表: 这样做,我有一个非常容易使用的持久性数据列表,这正是我在构建/演示应用程序基本块时

  • 子查询如图所属,是能够查询到数据的 如果加上 where like 条件就查不出数据了

  • 使用Wireshark,我看到iOS飞利浦远程电视应用程序与我的飞利浦电视交谈,运行他们的新os Saphi发送一些HTTP请求,授权标题如下: 授权:基本1:ZmVay1EQVFOaZhwQ4Kv81ypLAZNczV9sG4KkseXWn1NEk6cXmPKO/MCA9SRYSLVLCFMNNE4C4C4PxZTOOWVHVA== 我相信“1”是用户ID,它与带有“:”的长密码分开。 在维基百

  • 问题内容: 主要问题: 我用两种不同的方式定义相同的模型。为什么会得到不同的结果?它们似乎是相同的模型。 第二个问题(在下面回答)如果再次运行代码,则会再次得到不同的结果。我已经在开始时设置了种子以修复随机性。为什么会这样呢? 第一次,输出为: 第二次,输出为: 阅读答案后更新: 通过以下答案,我的问题之一已得到解答。我将代码的开头更改为: 而且,现在我得到的数字与以前相同。因此,它是稳定的。但是

  • 我正在使用以下代码在Java应用程序中使用Git。我有一个有效的密钥(一直使用它),并且这个特定的代码以前用相同的密钥和git存储库为我工作过,但是现在我得到了以下异常: PrivateKey无效:[B@59C40796. 在这一行: 在网上搜索后,我将createDefaultJSch更改为使用PEMWriter: 但仍然得到“无效的PrivateKey”异常。