2014-03-01 92 views
0

我有以下的代碼塊:傳遞參數參數

typedef struct Folder{ 
void (**vtable)(); 
struct Set *ns; 
}Folder; 

Node *newFolder(char *n,struct Set *ns); 

當我編譯這個文件,它給了我:

passing argument to parameter 'ns' here 
Node *newFolder(char *n,struct Set *ns); 

下面是該我的測試單位:

void testFolderNrNodes(CuTest *tc) { 
    Node_reset(); 
    Node* folder = newFolder("folder_to_test", SetNil()); 
    CuAssertIntEquals(tc, 1, nrNodes(folder)); 
} 

它給了我這個錯誤:

incompatible integer to pointer conversion passing 'int' to parameter of type 
'struct Set *' [-Wint-conversion] 
Node* folder = newFolder("folder_to_test", SetNil()); 
              ^~~~~~~~ 

我不明白問題所在。它是否來自struct Set *ns?爲什麼我會收到"incompatible integer to pointer conversion passing 'int' to parameter of type 'struct Set *"的消息? 有人可以讓我知道我在做什麼錯了嗎?

+1

什麼是'struct set'(和'Node')?當你使用'struct Set'時,你確定你不是指'struct Folder'嗎? 'SetNil()'問題似乎是你沒有聲明函數,所以通過上下文C編譯器假定它是一個返回int的函數。 –

+1

請更新您的問題以包含'SetNil()'的定義。 –

+0

它看起來像SetNil()返回一個int,而不是指向結構Set的指針。正如@leeduhem所提到的,請包括SetNil()的定義,這將有助於解決問題 – Joe

回答

0

您的SetNil()函數要麼返回一個整數,要麼在其使用前沒有被聲明(在這種情況下,編譯器會假定它返回一個整數)。然而,newFolder()期待其第二個參數是struct Set *

0

從您的評論,很顯然SetNil()確實返回一個int。如果你真的想避免該警告,那麼你可以更改代碼以

newFolder("folder_to_test", (struct Set *)SetNil())

然而,這可能是非常危險的,除非你能知道什麼是一個SetNIL回報。真正的修復應該在函數中SetNil()

+0

我認爲它會返回一個空集。我正在嘗試編寫它。 –