bubble
bubble

Reputation: 3526

How to use pointers to structures

I have defined a structure in one of my source code files. Also I have defined pointer to that structure like (global declaration)

struct blockPropStruct { int random_id; int id; CvPoint left_up; CvPoint right_down; };

typedef struct blockPropStruct *newBlock;

In the same file I am assigning memory to those pointers using malloc to create array of structures.

newBlock = (blockPropStruct*)malloc(maxNum*sizeof(blockPropStruct));

Now I am trying yo use it in some other source file by declaring (global declaration)

extern struct blockPropStruct *newBlock;

Now when I use something like

newBlock[i].left_up.x=mark1[i];

It throws up an error.

Upvotes: 0

Views: 163

Answers (4)

Mahesh
Mahesh

Reputation: 34665

newBlock = (blockPropStruct*)malloc(maxNum*sizeof(blockPropStruct));

To actually for the above statement to work, the current source file should see the size of structure. So, check whether you have included the corresponding header file.


extern struct blockPropStruct *newBlock;

And when you are doing -

newBlock[i].left_up.x=mark1[i];

You should bring the definition of the blockPropStruct to the current compilation unit to be able to use it members. So, try -

#include "blockPropStruct.h"
extern struct blockPropStruct *newBlock;  // This says to use else where 
                                          // initialized newBlock
// ....
newBlock[i].left_up.x=mark1[i];           // And to do this, bring the definition
                                          // to this file scope

And there is no need to explicitly typecast malloc.

Upvotes: 0

Jeff Mercado
Jeff Mercado

Reputation: 134611

The name of your structure is struct blockPropStruct. Note that in C, you can't just remove the struct part, it's part of the type's name. You can define a type for your structure so you have less typing, but I think it's better to remember to use your structures as struct blockPropStruct.

Based on the error messages you have added in your comments:

error C2036: 'blockPropStruct *' : unknown size
error C2027: use of undefined type 'blockPropStruct'

You are attempting to get the size sizeof(blockPropStruct) in your malloc() call since blockPropStruct is not a valid identifier so you are attempting to get the size of an undefined type.

To define your type:

typedef struct blockPropStruct blockPropStruct;

Now you can refer to your structure type as blockPropStruct or struct blockPropStruct.

Upvotes: 2

Batman
Batman

Reputation: 1324

You need to give a name with 'typedef' and point to it.

Upvotes: 0

David Heffernan
David Heffernan

Reputation: 613572

It would appear that you have omitted the declaration of the struct type in the file which declares the extern variable.

Upvotes: 2

Related Questions