在c++包装的C代码中重复const错误
Duplicate const error with C++ wrapping C code
我有一些c++应用程序中包含和使用的C代码,这里的重要部分:
C代码
ifdef __cplusplus
extern "C" {
endif
...
typedef void* problem_type;
...
int problematic_fn_proto( const problem_type const arg );
ifdef __cplusplus
}
endif
不幸的是,由于duplicate 'const'
错误,这将无法编译。是typedef
引起了这个问题。如果我把函数的原型改成:
int problematic_fn_proto( const void* const arg );
没有问题了。不幸的是,我不能移除typedef
。这里有解决方案吗?我可以对C部分进行其他更改,但是typedef和它作为函数参数的使用必须保留。
你得到这个的原因是,现在problem_type
是一个类型在它自己的权利,但唯一的地方双const (const直接之前和之后的类型具有相同的含义)有意义的是,如果你使用指针。如果你仍然想使用typedef
首先是在类型定义中不包含指针:
typedef void problem_type;
int problem_fn_proto( const problem_type* const arg);
第二种方法是在typedef:
中包含const
说明符。typedef void const* cproblem_type;
typedef void* problem_type; // non-const variant not used here
int problem_fn_proto(cproblem_type const arg);
在最后一个解决方案中,cproblem_type
是一个指向常量数据的指针,使用cproblem_type const
表示该常量(即指向常量数据的常量指针)。
第三个解决方案是注意到实参的连续性意义不大。如果函数碰巧修改了实参,则无法从调用方看到:
typedef void const* cproblem_type;
int problem_fn_proto(cproblem_type arg);
相关文章:
- 在运算符重载定义中使用成员函数(const错误)
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 类型为 "Bucket&"(未限定的 const 限定)的引用不能使用 "SortedList." 类型的值进行初始化 如何修复此错误?
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 为什么我的编译器在调用 const getter 函数时抛出"转换丢失(const)限定符"错误?
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- test1.cpp:9:77:错误:对"(const std::normal_distribution) <double>(std::mt19937&)"的调用不匹配
- 错误:对类型 'const ItemInstance' 的引用无法绑定到类型 'void' 的右值
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- C++ Boost - 序列化错误 - 将"const B"作为"this"参数
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- 索引 2D 向量时'Reference to type const..'编译错误
- 引发"char const*"错误的实例后调用的终止
- 在返回 const 错误的函数中传递值
- 在c++包装的C代码中重复const错误
- 静态常量匿名联合使用 GCC 4.9.3 给出"uninitialized const"错误
- 将const char*传递给方法,但得到char const *错误
- 在' const '错误之前预期的主表达式