向前声明外部结构
Forward-declaring an extern struct
在我开始之前:
- 请注意 我不想要来改变我在这里向你们展示的主要设计。
- 如果你认为这个标题不合适,可以随意更改
- c++标签在这里是因为解决方案也应该是等价的
我有一个标题breakpoints.h
声明:
typedef struct BreakpointInfo BreakpointInfo;
/*
* Iterate all breakpoints known to the Breakpoints service,
* including breakpoints that are created by other (remote) clients.
*/
typedef void IterateBreakpointsCallBack(BreakpointInfo *, void *);
extern void iterate_breakpoints(IterateBreakpointsCallBack * callback, void * args);
和相应的breakpoints.c
定义:
struct BreakpointInfo {
Context * ctx;
LINK link_all;
/*
* A lot of members ..
*/
LINK link_hit_count;
};
现在我想在另一个文件context.c
中使用这个功能:
#include <tcf/services/breakpoints.h> // The header file
extern BreakpointInfo;
//extern struct BreakpointInfo; // Also did not work
void MyIterateBreakpointsCallBack(/* struct */ BreakpointInfo *bpInfo, void *args)
{
bpInfo->file;
}
void thread_function()
{
// ..
iterate_breakpoints(&MyIterateBreakpointsCallBack, 0);
// ..
}
但是智能感官告诉我:
BreakpointInfo *bpInfo, Error: pointer to incomplete class type is not allowed.
所以问题是:
- 是甚至可能的没有移动
BreakpointInfo
的定义到头文件?
我不想改变它,因为它是一个相当复杂的程序,我不想做这样的事情来破坏它的设计。
这可能是我使用它的错误方式,但为什么会有一个iterate_breakpoints()
功能可供我访问,如果我不能访问BreakpointInfo
?
我希望你明白我在问什么。如果你需要什么帮助,请告诉我。
问好。
我认为这是不可能的,因为在MyIterateBreakpointsCallBack
中你试图访问类型的成员,这需要一个完整的类型。
我不熟悉的项目,你试图与工作,但一个快速的谷歌搜索暗示我它的tcf。代理项目。如果这是真的,在breakpoints.h文件中快速查看之后,我注意到有一个get_breakpoint_attribute()
,它为您提供了一个名称/值对列表。也许这应该给你的信息,你需要实现你的MyIterateBreakpointsCallBack()
。
相关文章:
- 在结构外部调用指向函数的指针
- C++ 在外部使用嵌套结构实现类函数
- C - 外部结构
- CERN 根:为命名空间中的外部"C"结构生成流处理器
- 从不同的标头访问外部结构成员
- 如何将值从外部传递到结构函数
- 结构外部的重载运算符
- 如何使结构内部的可变参数模板可以在外部访问?
- 是否可以定义一个在外部"C"块中继承另一个结构的结构?
- 如何使用LLVM访问外部结构?
- 用于存储数据的结构和外部二进制文件
- C++中的结构数组和外部文件
- 从外部函数访问外部结构属性
- LNK 2001 未解析的外部在 NPPluginFuncs 结构 ptr 作为静态类成员
- 命名空间外部变量的未定义参考/多重定义,C 结构问题
- 模板结构外部的重载运算符
- 用相同的数据c++包装/铸造类和结构,以实现外部api
- 错误 LNK2019:函数"private: 结构_DISPLAY_DEVICEA __thiscall"中引用未解析的外部符号__imp__EnumDisplayDevicesA@16
- 外部C结构的C++默认复制/移动赋值运算符不是常量
- 是否可以在结构外部编写自动转换运算符