2

所以我有这个结构:

// Structure used to define a point (x,y) in the grid.
typedef struct
{
    int x, y;
} Point;

和这个功能

Sequence getSequence(int grid[][MAXCOLS], Point startPos)
{
    // Create an empty sequence
    Sequence emptySeq;
    emptySeq.size = 0;

    // Use the empty sequence to start the recursive function
    return generateSeq(grid, startPos, emptySeq);
}

我不知道序列开始的位置。所以我在 main 中也调用了 16 次 getSequence 函数,这样您就可以将 16 个网格位置中的每一个作为可能的起始位置传递给它。

我试过了,但没有用。

getSequence(grid, x.0, y.0 );

有人可以告诉我如何调用 main 中的 getSequence。我是编程新手

谢谢

4

3 回答 3

4

最直接的方法是Point像 Arun 所说的那样创建一个实例:

int main()
{
   Point p1 ;
   // create grid here

   p1.x = 0 ;
   p1.y = 0 ;
   getSequence( grid, p1 );
}

如果你可以使用C++11,那么你也可以这样做:

 getSequence( grid, {0,0} );

要更像C++-like,虽然你真的应该使用constructor这样的:

class Point
{
     public:
     int x, y;

     Point( int a = 1, int b = 1 ) : x(a) , y(b) {} 
} ;

此外,您应该考虑制作x和制作,但是您的特定示例开始变得更加复杂。如果你有一个你的电话会变得稍微容易一些,因为你可以这样做:yprivateconstructor16

 getSequence( grid,  Point(1,1) );
 getSequence( grid,  Point(2,2) );

或者您也可以使用循环, 和 的值ab取决于您的应用程序:

for( int a = 0, b = 0; a < 5; ++a, ++b)
{
   getSequence(grid, Point(a,b) );
}
于 2013-03-26T02:09:38.993 回答
1

作为其他答案的替代方案,您可以提供Point一个构造函数:

struct Point
{
    Point(int x, int y) : x(x), y(y){}
    int x, y;
}

然后做:

getSequence(grid, Point(0, 0));

这将消除Point每次要调用函数时显式构造(或修改)对象的需要,并且 IMO 更具可读性,因为Point在此上下文中的目的仅仅是getSequence.

注意:typedef前面的关键字在 C++ 中struct不必要的

于 2013-03-26T02:14:28.140 回答
0

您必须创建一个 Point 实例并将其传递给 getSequence 方法。

    Point gridpoint; 
    gridpoint.x = 0;
    gridpoint.y = 0;
    getSequence(grid, gridpoint);
    // Use gridpoint here   
于 2013-03-26T02:09:44.617 回答