无法使用" std :: pair"编译代码

时间:2016-08-18 22:12:20

标签: c++ c++11

我尝试研究和修改此计划" https://github.com/PetterS/monte-carlo-tree-search.git"像这样。

diff --git a/games/connect_four.h b/games/connect_four.h
index a575217..52f59cf 100644
--- a/games/connect_four.h
+++ b/games/connect_four.h
@@ -3,6 +3,7 @@

 #include <algorithm>
 #include <iostream>
+#include <utility>
 using namespace std;

 #include <mcts.h>
@@ -15,6 +16,9 @@ public:

        static const char player_markers[3]; 

+        typedef std::pair <int, int> MyMove;
+        static const MyMove my_no_move (-1, -1);
+
        ConnectFourState(int num_rows_ = 6, int num_cols_ = 7)
                : player_to_move(1),
              num_rows(num_rows_),

即,引入一种新类型&#34; MyMove&#34;与std :: pair和常量。此代码无法编译。如果我删除这些行,它编译没有问题。

.../monte-carlo-tree-search/games/connect_four.h:20:41: error: expected identifier before ‘-’ token
.../monte-carlo-tree-search/games/connect_four.h:20:41: error: expected ‘,’ or ‘...’ before ‘-’ token

但是,在同一台机器上,我测试编译的相同代码部分。

#include <utility>

int main ()
{
    typedef std::pair <int, int> MyMove;
    static const MyMove my_no_move (-1, -1);
    return 0;
}

$ g++ temp.C -std=c++0x
$

为什么呢?我承认我的机器上的编译器没有更新,它不完全支持c ++ 11,但是为什么相同的代码行有不同的结果。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

class MyClass {
    static const MyMove MyClass::my_no_move;
};

const MyMove MyClass::my_no_move(-1, -1);

答案 1 :(得分:1)

您不能声明类似的类的成员变量。

声明为:

typedef std::pair <int, int> MyMove;
static const MyMove my_no_move;

然后在课外定义它:

// The typedef MyMove is also scoped
const ConnectFourState::MyMove ConnectFourState::my_no_move(-1, -1);