C++:外部“C”与外部之间的命名空间冲突和班级成员
我偶然发现了一个相当奇特的 c++ 命名空间问题:
简明示例:
extern "C" {
void solve(lprec * lp);
}
class A {
public:
lprec * lp;
void solve(int foo);
}
void A::solve(int foo)
{
solve(lp);
}
我想在我的 C++ 成员函数 A::solve 中调用 c 函数solve。编译器对我的意图不满意:
error C2664: 'lp_solve_ilp::solve' : cannot convert parameter 1 from 'lprec *' to 'int'
我可以在求解函数前添加一些前缀吗? C::解决不起作用
I stumbled upon a rather exotic c++ namespace problem:
condensed example:
extern "C" {
void solve(lprec * lp);
}
class A {
public:
lprec * lp;
void solve(int foo);
}
void A::solve(int foo)
{
solve(lp);
}
I want to call the c function solve in my C++ member function A::solve. The compiler is not happy with my intent:
error C2664: 'lp_solve_ilp::solve' : cannot convert parameter 1 from 'lprec *' to 'int'
Is there something I can prefix the solve function with? C::solve does not work
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
要调用全局命名空间中的函数,请使用:
无论该函数是否为
extern "C"
,都需要这样做。To call a function in the global namespace, use:
This is needed whether the function is
extern "C"
or not.C 函数位于全局命名空间中。所以尝试一下
The C functions are in the global namespace. So try
请尝试
::solve
Please try
::solve
只需
::solve(lp)
。请注意,您的类声明后还需要一个分号。Simply
::solve(lp)
. Note you also need a semicolon after your class declaration.