我正在尝试使用turbo c
在c中创建对象。我无法在其中定义属性。
/*
code for turbo c
included conio.h and stdio.h
*/
typedef struct {
int topX;
int topY;
int width;
int height;
int backgroundColor;
}Window;
typedef struct {
Window *awindow;
char *title;
}TitleBar;
Window* newWindow(int, int, int, int, int);
TitleBar* newTitleBar(char*);
void main() {
TitleBar *tbar;
tbar = newTitleBar("a title");
/*
the statement below echos,
topX:844
topY:170
instead of
topX:1
topY:1
*/
printf("topX:%d\ntopY:%d", tbar->awindow->topX, tbar->awindow->topY);
/*
where as statement below echos right value
echos "a title"
*/
printf("\ntitle:%s", tbar->title);
//displayTitleBar(tbar);
}
Window* newWindow(int topX, int topY, int width, int height, int backgroundColor) {
Window *win;
win->topX = topX;
win->topY = topY;
win->width = width;
win->height = height;
win->backgroundColor = backgroundColor;
return win;
}
TitleBar* newTitleBar(char *title) {
TitleBar *atitleBar;
atitleBar->awindow = newWindow(1,1,80,1,WHITE);
atitleBar->title = title;
return atitleBar;
}
我做错了什么?
定义结构的正确方法是什么?
答案 0 :(得分:14)
你只需要声明一个指针:
Window *win;
并尝试在下一行中写入,而指针仍未指向任何有效对象:
win->topX = topX;
您可能想要创建一个新对象:
Window *win = (Window*)malloc(sizeof(Window));
与TitleBar相同。
答案 1 :(得分:3)
您的指针实际上从未分配给任何东西。在C中,指针本身不存在,它需要内存中的实际对象指向。
This page有更多。