我创建了一个结构Person并且在其中包含了这些变量,然后我添加了一个名为father的新字段,其类型是指向一个人的指针。 我必须将FJames的数据初始化如下:fname = Whatever,lname = Bond,age = 80,job = Farmer,father = NULL
然后将James的数据初始化如下:fname = James,lname = Bond,age = 40,job = Actor,father = FJames
然后显示所有数据。 我收到一个错误“使用不兼容类型”Person“初始化struct Person * 该怎么办? :/ 我甚至不认为我做得对,请帮忙!
/#include <stdio.h>
typedef struct {
int age;
char *fname;
char *lname;
char *job;
struct Person *father;
}Person;
int main(int argc, const char * argv[])
{
Person James;
Person FJames = {80,"Whatever","Bond","Painting",NULL};
James.age = 40;
James.fname = "James";
James.lname = "Bond";
James.job = "Engineering";
James.father = FJames;
}
答案 0 :(得分:1)
您实际上并未声明struct Person
。
您正在声明匿名结构并将其输入到人身上。然后,您应该将其仅用作Person
,而不是struct Person
。
struct Person {
struct Person *father; // this will work
}
或者如果你想要typedef
typedef struct s_Person {
struct s_Person *father
} Person;
答案 1 :(得分:0)
typedef struct {
int age;
char *fname;
char *lname;
char *job;
struct Person *father; // << This is a pointer to a Person
} Person;
James.father = FJames;
FJames
不是Person*
。他是Person
。您需要malloc
他才能获得Person*
。或者使用&
此代码还有其他一些问题,但是那个问题会给你带来错误。
答案 2 :(得分:0)
最后一行应该是
James.father = &FJames;
father
字段是指针,但FJames是Person
。您可以使用&
获取FJames
的地址。
修改强>
除了aragaer建议的方式之外,还应该更改结构定义,例如:
typedef struct s_Person {
// ...
struct s_Person *father;
} Person;
答案 3 :(得分:0)
James.father =&amp; FJames应该是你需要的。
还有其他小问题。这些天从字符串常量初始化char *是不受欢迎的,因为char *意味着可以改变指向的内存。
答案 4 :(得分:0)
这是一个工作计划:
#include <stdio.h>
#include <stdlib.h>
typedef struct Person {
int age;
char *fname;
char *lname;
char *job;
struct Person *father;
} Person;
int main(int argc, const char * argv[])
{
Person James;
Person FJames = {80,"Whatever","Bond","Painting",NULL};
James.age = 40;
James.fname = "James";
James.lname = "Bond";
James.job = "Engineering";
James.father = &FJames;
fprintf(stdout, "%d\t%s\t%s\t%s\tpops:\t%s\t%s\n", James.age, James.fname, James.lname, James.job, (James.father)->fname, (James.father)->lname);
return EXIT_SUCCESS;
}
更正:
typedef
,以便声明Person
。James.father
时,应取消引用FJames
,以便将其设置为FJames
指针的值。main()
函数应返回int
,因此请返回EXIT_SUCCESS
(在stdlib.h
中定义)以注意您已正确退出。建议:
James.father
的属性时,请使用优先级和箭头表示法取消引用其值。gcc
,请使用-Wall
选项进行编译以启用所有编译警告。这将有助于记录需要更正的警告。