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.
You need a member object of type foo::packet
in class foo
.
class foo{
public:
struct packet{
int x;
u_int y;
};
packet my_packet; // <- THIS
};
In your .cpp, you should do:
foo *foo_1 = &foo;
printf("The value of x is : %d",foo_1->my_packet.x);
printf ("The value of y is : %u", foo_1->my_packet.y);
You must remember that even though packet
is inside foo
, it is not included in foo
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...).
In your class Foo
, you have defined a packet
struct, but you have not declared any instances of it. What you want is (this is a compileable self-contained example):
#include <iostream>
class Foo {
public:
struct Packet{
Packet() : x(0), y(0) {}
int x;
int y;
} packet;
};
int main(int, char**)
{
Foo foo_1;
std::cout << "The value of x is: " << foo_1.packet.x << std::endl;
std::cout << "The value of y is: " << foo_1.packet.y << std::endl;
}
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:
class foo
{
public:
foo() {} // A default constructor is also needed
struct
{
int x;
u_int y;
} packet;
}; // -- don't forget that semicolon
int main()
{
foo *foo_1 = new foo(); // instantiate a new object on the heap
printf("The value of x is : %d",foo_1->packet.x);
printf("The value of y is : %u", foo_1->packet.y);
delete foo_1; // release the memory
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With