调用一个函数并在结构中传递它的值

时间:2013-03-26 02:02:57

标签: c++

所以我有这个结构:

// 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。我是编程新手

由于

3 个答案:

答案 0 :(得分: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++ - 就像,尽管你真的应该使用constructor这样:

class Point
{
     public:
     int x, y;

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

此外,您应该考虑将xy设为private,但您的特定示例会变得更复杂。如果您有constructor 16,那么您的 getSequence( grid, Point(1,1) ); getSequence( grid, Point(2,2) ); 电话会变得更容易,因为您可以这样做:

a

或者您也可以使用循环,bfor( int a = 0, b = 0; a < 5; ++a, ++b) { getSequence(grid, Point(a,b) ); } 的值取决于您的应用:

{{1}}

答案 1 :(得分: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前面的struct关键字为unnecessary in C++

答案 2 :(得分:0)

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

    Point gridpoint; 
    gridpoint.x = 0;
    gridpoint.y = 0;
    getSequence(grid, gridpoint);
    // Use gridpoint here