создать новый объект, используя структуру в c - PullRequest
4 голосов
/ 05 марта 2012

Я пытаюсь создать объекты в c, используя turbo 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 ]

14 голосов
/ 05 марта 2012

Вы просто объявляете указатель:

  Window *win;

И попробуйте написать в следующих строках, пока указатель по-прежнему не указывает ни на один действительный объект:

  win->topX = topX;

Возможно, вы хотели создать новый объект:

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

То же самое с TitleBar.

3 голосов
/ 05 марта 2012

Ваши указатели на самом деле никогда не привязаны ни к чему. В C указатель не существует сам по себе, ему нужен фактический объект в памяти, чтобы указывать на него.

Эта страница имеет больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...