dav*_*ler 4 c c++ c++11 g++4.8
我有一些包含在C++应用程序中的C代码,这里的重要部分是:
C代码
ifdef __cplusplus
extern "C" {
endif
...
typedef void* problem_type;
...
int problematic_fn_proto( const problem_type const arg );
ifdef __cplusplus
}
endif
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于duplicate 'const'错误,这将无法编译.这typedef是导致问题的原因.如果我只是将函数的原型更改为:
int problematic_fn_proto( const void* const arg );
Run Code Online (Sandbox Code Playgroud)
没有更多的问题.不幸的是,我无法删除typedef.这里有解决方案吗?我可以对C部分进行其他更改,但是typedef和它作为函数的参数必须保留.
你得到这个的原因是,现在problem_type它本身就是一个类型,但是唯一的地方是双重const(直接在一个类型之前和之后的const具有相同含义)是有意义的,如果你使用指针.如果您仍想使用,有几个选项typedef
首先是不在typedef中包含指针:
typedef void problem_type;
int problem_fn_proto( const problem_type* const arg);
Run Code Online (Sandbox Code Playgroud)
第二种是const在typedef中包含说明符:
typedef void const* cproblem_type;
typedef void* problem_type; // non-const variant not used here
int problem_fn_proto(cproblem_type const arg);
Run Code Online (Sandbox Code Playgroud)
在最后一个解决方案中,它cproblem_type是一个指向常量数据的指针,使用它cproblem_type const的常量(这是一个指向常量数据的常量指针).
第三种解决方案是注意参数的常量并不意味着什么.如果函数碰巧修改了参数,则从调用者看不到它:
typedef void const* cproblem_type;
int problem_fn_proto(cproblem_type arg);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1505 次 |
| 最近记录: |