我在scala中有以下代码
type Pos = (Int, Int)
def legal_moves(dim: Int, path: Path, x: Pos): List[Pos] =
{
List((x._1 + 1, x._2 + 2),
(x._1 + 2, x._2 + 1),
(x._1 + 2, x._2 - 1),
(x._1 + 1, x._2 - 2),
(x._1 - 1, x._2 - 2),
(x._1 - 2, x._2 - 1),
(x._1 - 2, x._2 + 1),
(x._1 - 1, x._2 + 2))
}
我想将其转换为c ++,我尝试过以下操作:
typedef vector<pair<int,int> > Path;
Path move(const pair<int,int> & passed_Pair)
{
Path allMoves =
(
( (get<0>(passed_Pair))+1, (get<1>(passed_Pair))+2),
( (get<0>(passed_Pair))+2, (get<1>(passed_Pair))+1),
( (get<0>(passed_Pair))+2, (get<1>(passed_Pair))-1),
( (get<0>(passed_Pair))+1, (get<1>(passed_Pair))-2),
( (get<0>(passed_Pair))-1, (get<1>(passed_Pair))-2),
( (get<0>(passed_Pair))-2, (get<1>(passed_Pair))-1),
( (get<0>(passed_Pair))-2, (get<1>(passed_Pair))+1),
( (get<0>(passed_Pair))-1, (get<1>(passed_Pair))+2)
);
return allMoves;
}
我收到此错误消息:
从'int'转换为非标量类型'Path {aka std :: vector&gt;}'request
我将所有的所有动作都改为红色。
如果我这样做的话
Path allMoves = { // as above }
我收到此错误消息:
> error: could not convert ‘{(((void)(((int)std::get<0ul, int, int>((* &
> passed_Pair))) + 1)), (((int)std::get<1ul, int, int>((* &
> passed_Pair))) + 2)), (((void)(((int)std::get<0ul, int, int>((* &
> passed_Pair))) + 2)), (((int)std::get<1ul, int, int>((* &
> passed_Pair))) + 1)), (((void)(((int)std::get<0ul, int, int>((* &
> passed_Pair))) + 2)), (((int)std::get<1ul, int, int>((* &
> passed_Pair))) - 1)), (((void)(((int)std::get<0ul, int, int>((* &
> passed_Pair))) + 1)), (((int)std::get<1ul, int, int>((* &
> passed_Pair))) - 2)), (((void)(((int)std::get<0ul, int, int>((* &
> passed_Pair))) - 1)), (((int)std::get<1ul, int, int>((* &
> passed_Pair))) - 2)), (((void)(((int)std::get<0ul, int, int>((* &
> passed_Pair))) - 2)), (((int)std::get<1ul, int, int>((* &
> passed_Pair))) - 1)), (((void)(((int)std::get<0ul, int, int>((* &
> passed_Pair))) - 2)), (((int)std::get<1ul, int, int>((* &
> passed_Pair))) + 1)), (((void)(((int)std::get<0ul, int, int>((* &
> passed_Pair))) - 1)), (((int)std::get<1ul, int, int>((* &
> passed_Pair))) + 2))}’ from ‘<brace-enclosed initializer list>’ to
> ‘Path {aka std::vector<std::pair<int, int> >}’ };
感谢您的时间
答案 0 :(得分:1)
你的C ++语法是错的。您需要学习在堆栈上构造对象的语法以及如何使用向量的initializer_list构造函数(http://en.cppreference.com/w/cpp/utility/initializer_list)
#include <vector>
#include <utility>
typedef std::vector<std::pair<int,int> > Path;
Path move(const std::pair<int,int>& passed_Pair)
{
using std::get;
Path allMoves
{
{ get<0>(passed_Pair)+1, get<1>(passed_Pair)+2},
{ get<0>(passed_Pair)+2, get<1>(passed_Pair)+1},
{ get<0>(passed_Pair)+2, get<1>(passed_Pair)-1},
{ get<0>(passed_Pair)+1, get<1>(passed_Pair)-2},
{ get<0>(passed_Pair)-1, get<1>(passed_Pair)-2},
{ get<0>(passed_Pair)-2, get<1>(passed_Pair)-1},
{ get<0>(passed_Pair)-2, get<1>(passed_Pair)+1},
{ get<0>(passed_Pair)-1, get<1>(passed_Pair)+2}
};
return allMoves;
}