mardi 5 décembre 2017

Covert scala to c++ - list to vector

I have the following code in 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))
}

I want to convert it to c++, I have tried to do the following:

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;
}

and I am getting this error message:

conversion from ‘int’ to non-scalar type ‘Path {aka std::vector >}’ requested

and I get all the allMoves in red.

If I did it like this

Path allMoves = { // as above }

I get this error message:

> 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> >}’   };

Thanks for your time

Aucun commentaire:

Enregistrer un commentaire