2014-03-01 91 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

我认为它会返回一个空集。我正在尝试编写它。 –