使用c中的结构创建新对象

时间:2012-03-05 07:17:40

标签: c structure

我正在尝试使用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;
}

我做错了什么?

定义结构的正确方法是什么?

2 个答案:

答案 0 :(得分:14)

你只需要声明一个指针:

  Window *win;

并尝试在下一行中写入,而指针仍未指向任何有效对象:

  win->topX = topX;

您可能想要创建一个新对象:

  Window *win = (Window*)malloc(sizeof(Window));

与TitleBar相同。

答案 1 :(得分:3)

您的指针实际上从未分配给任何东西。在C中,指针本身不存在,它需要内存中的实际对象指向。

This page有更多。