读书人

结构体中包含结构体解决思路

发布时间: 2012-03-30 17:32:09 作者: rapoo

结构体中包含结构体
在一个结构提里面有声明的一个结构体,并定义了变量,如下:
#define MAX_NB_OF_FRONTENDS_IN_CHAIN 5
struct dibChannel
{
uint32_t RF_kHz;
uint32_t bandwidth_kHz;
int chid_to_feid[MAX_NB_OF_FRONTENDS_IN_CHAIN];
struct dibChannelFEInfo
{
uint32_t tune_time_locked;
uint32_t tune_time_data;
uint32_t tune_start_time;
uint32_t tune_time_estimation[2];
uint32_t priv[11];
}fe_info[MAX_NB_OF_FRONTENDS_IN_CHAIN];

貌似结构体ibChannelFEInfo的作用域只在结构体dibChannel内部,我想知道有什么办法可以在外部或者在其他文件中使用struct dibChannelFEInfo来定义变量?比如:

struct dibChannelFEInfo *into=channel_frontend_info(ch, fe->id); //ch是指向结构体dibChannel类型的指针,fe是指向另一个结构体类型的指针
struct dibChannelFEInfo * channel_frontend_info(struct dibChannel *ch, int id)
{
return &ch->fe_info[feid_to_chid(ch, id)];
}
这个函数又该怎么实现啊,应该怎么改才行?我是想要返回值是dibChannelFEInfodib类型(准确说应该是dibChannel::dibChannelFEInfo类型,不知道这样表达对不对),以便实现上面的函数调用
求解,大神们帮忙啊!







[解决办法]
下面这样不行么?

C/C++ code
#include <iostream>using namespace std;struct A{    int a;    struct B    {        double m;    }b;};A::B* f(){    A::B* b = new A::B;    b->m = 5.5;    return b;}int main (){    A::B* b = f();    cout << b->m << endl;    delete b;}
[解决办法]
何必那么绕呢,直接返回一个dibChannel*类型就可以访问其中的fe_info成员了吧。
人家这么定义结构体就是为了封装对象吧。
[解决办法]
struct和 class基本是一回事 (struct默认是public) 这样你应该懂得

读书人网 >C++

热点推荐