2013-03-26 82 views
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); 

有人請告訴我如何調用getSequence主。進出口新的編程

感謝

回答

4

最直接的方法是創建的Point實例作爲阿倫說,像這樣:

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

還那麼你應該考慮一下做xyprivate很好,但你的具體的例子開始越來越複雜呢。如果你有一個constructor16通話變得稍微容易些,因爲你可以這樣做:

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)); 
} 
+0

太好了。非常感謝 – user1896464 2013-03-26 02:14:09

+0

我可以只使用一個循環通過職位?或者我必須這樣做16次每次更改x和y值? : 'startPos.x = 0; \t \t startPos.y = 0; \t某個getSequence(網格,startPos);' – user1896464 2013-03-26 02:20:31

+0

@ user1896464增加了一些細節,希望能提供一個很好的答案 – 2013-03-26 02:25:29

0

您必須創建一個Point實例並將其傳遞給getSequence方法。

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

太好了。非常感謝 – user1896464 2013-03-26 02:14:30

1

作爲替代其他的答案,你可以給Point構造:

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

然後做:

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

這將刪除需要顯式地構造(或修改)每次你想調用該函數時都需要一個對象,並且IMO更具可讀性,因爲在這種情況下,Point的目的僅僅是一個pa rameter到getSequence

注意:struct前面的typedef關鍵字是unnecessary in C++

+0

+1我們在同一時間寫了同樣的東西,超出了被問到的基本問題的偉大建議。 – 2013-03-26 02:36:27