I have an .hpp and .cpp file. I want to access the variable in the structure within a class which happens to be in the header .hpp file, in the .cpp file.
In .hpp, I have
class foo{
public:
struct packet{
int x;
u_int y;
};
};
foo(const char*name)
:m_name(name){}
In .cpp I did:
foo *foo_1 = &foo;
printf("The value of x is : %d",foo_1->packet.x);
printf ("The value of y is : %u", foo_1->packet.y);
On doing this I receive the following error:
code_1.cpp:117: error: expected primary-expression before ‘;’ token
code_1.cpp:118: error: invalid use of ‘struct foo::packet’
code_1.cpp:119: error: invalid use of ‘struct foo::packet’
make: *** [code_1] Error 1
My objective is to get the values of x and y in the cpp file. Any suggestion/idea will be really appreciated.
Thanks.
The
struct
declaration in the class does not create an instance of it - just defines it as a contained struct withinfoo
.If you create a struct instance in the class, you can reference it from the containing pointer:
Now you can say
foo_1->m_packet.x = 3;
, etc.Also, you need to create an instance of foo (in your code you try to take the address of the class name, which won't work):
foo* foo_1 = new foo;
Then,
delete foo_1
when done with it.You need a member object of type
foo::packet
inclass foo
.In your .cpp, you should do:
You must remember that even though
packet
is insidefoo
, it is not included infoo
as a member object. It is just a class enclosed inside another class. And for a class to be used, you must have objects of it (a class can also be used without having objects of it, but, well...).Class foo does not have a member packet but it contains another class/struct type named "packet". You'll have to provide a member of that type.
Can't do a test atm but you could either try
or
To access x and y via
foo_ptr->packet.(...)
orfoo_object.packet.(...)
.Try
hope this may help you we gave the structure name as V1 and acessing the elements by the use of dot operator
packet
is not a data member of the class, but the class that it defines it is however. You need to instantiate an object of that type in order to use it in that way:and besides tha packet-related business,
foo *foo_1 = &foo;
is bad, you can't take address of a class only of a variable.