我有一个.hpp和.cpp文件。我想访问类中的结构中的变量,该类恰好位于.cpp文件中的头.hpp文件中。
在.hpp,我有
class foo{
public:
struct packet{
int x;
u_int y;
};
};
foo(const char*name)
:m_name(name){}
在.cpp中我做了:
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);
执行此操作时,我收到以下错误:
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
我的目标是在cpp文件中获取x和y的值。任何建议/想法将非常感激。
感谢。
答案 0 :(得分:8)
foo::packet
中需要class foo
类型的成员对象。
class foo{
public:
struct packet{
int x;
u_int y;
};
packet my_packet; // <- THIS
};
在你的.cpp中,你应该这样做:
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);
您必须记住,即使packet
位于foo
内,它也不会作为成员对象包含在foo
中。它只是一个封闭在另一个类中的类。对于要使用的类,您必须具有它的对象(也可以在没有对象的情况下使用类,但是,好吧......)。
答案 1 :(得分:3)
在您的班级Foo
中,您已定义了packet
结构,但尚未声明任何实例。你想要的是(这是一个可编译的自包含示例):
#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;
}
答案 2 :(得分:2)
packet
不是该类的数据成员,但是它定义它的类是。您需要实例化该类型的对象才能以这种方式使用它:
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
}
答案 3 :(得分:0)
您刚刚定义了struct。 试试这样的事情 -
struct packet{
int x;
u_int y;
}test;
并在你的cpp中,像这样访问你的struct元素 -
foo_1.test.x
答案 4 :(得分:0)
类中的struct
声明不会创建它的实例 - 只需将其定义为foo
中的包含结构。
如果在类中创建结构实例,则可以从包含指针引用它:
struct packet{
int x;
u_int y;
} m_packet;
现在你可以说foo_1->m_packet.x = 3;
等等。
此外,您需要创建一个foo实例(在您的代码中,您尝试获取类名的地址,这将无效):
foo* foo_1 = new foo;
然后,delete foo_1
完成后。
答案 5 :(得分:0)
类foo没有成员数据包,但它包含另一个名为“packet”的类/结构类型。 您必须提供该类型的成员。
无法进行测试,但您可以尝试
class foo{
public:
struct {
int x;
u_int y;
} packet;
}
或
class foo{
public:
pack packet;
struct pack {
int x;
u_int y;
};
}
通过foo_ptr->packet.(...)
或foo_object.packet.(...)
访问x和y。
答案 6 :(得分:0)
除了与数据包相关的业务之外,foo *foo_1 = &foo;
还不好,你不能只接受一个变量类的地址。
答案 7 :(得分:0)
在.hpp中,您需要使用struct类型声明变量。 例如,
packet Packet;
你班上的
在.cpp中,试试这个
foo *foo_ptr = new foo; // creating new foo object in the heap memory with a pointer foo_ptr
printf("The value of x is : %d",foo_ptr->Packet.x);
printf ("The value of y is : %u", foo_ptr->Packet.y);
答案 8 :(得分:0)
您声明了结构,但您从未在其中添加任何数据。
答案 9 :(得分:0)
尝试
struct Vehicle
{
int wheels;
char vname[20];
char color[10];
}v1 = {4,"Nano","Red"};
int main()
{
printf("Vehicle No of Wheels : %d",v1.wheels);
printf("Vehicle Name : %s",v1.vname);
printf("Vehicle Color : %s",v1.color);
return(0);
}
希望这对你有所帮助
我们将结构名称赋予V1,并通过使用点运算符来获取元素