gpt4 book ai didi

c++ - 缺少分号 : C++ or SWIG issue?

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:24 27 4
gpt4 key购买 nike

这个问题实际上是关于 SWIG 的,而不是缺少分号的基本 C++。

我在一个类中(在头文件中)有以下方法:

class BarClass 
{
// ... more code goes here
unsigned int foo(unsigned int val) throw(std::invalid_argument) override;
// ... more code goes here
};

我有一个 SWIG 接口(interface)声明,形式如下:

%include "stdint.i"
%include "std_except.i"
%include "exception.i"

%module mymodule
%{
#include "headerFile.h"
%}
%include "headerFile.h"

代码用作 C++ 静态库,但也通过 SWIG 暴露给 python。使用 GCC/Clang 的正常编译效果很好。

但是,当使用 SWIG 包装库时,我收到一个错误:

headerFile.h:22: Error: Syntax error - possibly a missing semicolon.

我可以将方法声明替换为:

unsigned int foo(unsigned int val) throw(std::invalid_argument);

删除覆盖时,SWIG 似乎可以工作,但我收到警告。我的印象是 SWIG 对同时使用 throw 和 override 的组合感到困惑。

这是 SWIG 错误还是我遗漏的一些愚蠢的东西?

注意:我非常清楚不推荐使用 throw 声明,但这是 SWIG 获取有关异常的信息并为 Python 生成适当代码的方式。也许在 SWIG 中有更好/更新的方法来做到这一点?

最佳答案

您正在将 SWIG 与 C++11 结合使用:

http://www.swig.org/Doc3.0/CPlusPlus11.html

7.2.11 显式覆盖和 final:特殊标识符 final 和 override 可用于方法和析构函数,例如以下示例:

  virtual void ef() final override;
virtual ~DerivedStruct() override;

您可以:

  1. 将 C++11 与 C++ 编译器结合使用(例如:-std=c++11)。 推荐
  2. 禁用(删除)SWIG 生成器代码中的 C++11 功能。
  3. 使用技巧 #define override 使关键字 override 成为 NO-OP。

关于c++ - 缺少分号 : C++ or SWIG issue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49280831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com