2017-07-03 108 views
-2
typedef struct states{ 
    char stateName[20]; 
    char capital[20]; 
    char fact* = (char*)calloc(1000,sizeof(char)); 
}states; 

我不明白为什么它给我行此错误错误:预期“:”,“”,‘’,‘}’或‘之前__attribute__’‘*’令牌

char fact* = (char*)calloc(1000,sizeof(char)); 

它看起来每个字符的字符,我正在看的示例代码。任何人都可以请解释我做错了什么?

+3

不知道你在读什么书/教程。我的猜测是你误解了它。在结构定义中使用初始化器是无效的。 – kaylum

+0

它在C++中是合法的,但在C++中,您可能不会打扰使用'typedef'。另外,'char fact *'应该是'char * fact'。你能否更新你的问题来表明你从哪里得到了这个例子? –

+0

如果在定义结构时允许动态内存分配,(_think_)当calloc失败并返回空指针会发生什么? – madD7

回答

0

正如kaylum指出的那样,结构定义声明了一个类型而不是可以初始化的变量。你的例子是:

typedef struct states{ 
    char stateName[20]; 
    char capital[20]; 
    char fact* = (char*)calloc(1000,sizeof(char)); //WRONG! - Initialization inside struct! 
}states; 

在这种情况下,你正在定义一个类型,而不是一个变量。之后您将定义类型为states的变量,然后您将初始化它们。

编辑:您还可以使用初始化(假设你使用C99或较新的东西比):Initializers

相关问题