有人可以告诉我我做错了什么吗?
#include <iostream>
using namespace std;
int main() {
#define myvar B
#if myvar == A
cout << "A" << endl;
#elif myvar == B
cout << "B" << endl;
#else
cout << "Neither" << endl;
#endif
}
Run Code Online (Sandbox Code Playgroud)
输出是A,但显然我期待B
我在C++中使用python的C API(2.7)将python树结构转换为C++树.代码如下:
python树以递归方式实现为具有子列表的类.叶节点只是原始整数(不是类实例)
我加载模块并从C++调用蟒方法,使用从代码这里,它返回树,python_tree的一个实例,作为一个++中的PyObject℃.
递归遍历获得的PyObject.要获得孩子的名单,我这样做:
PyObject* attr = PyString_FromString("children");
PyObject* list = PyObject_GetAttr(python_tree,attr);
for (int i=0; i<PyList_Size(list); i++) {
PyObject* child = PyList_GetItem(list,i);
...
Run Code Online (Sandbox Code Playgroud)非常简单,它可以工作,直到我最终遇到分段错误,调用PyObject_GetAttr(Objects/object.c:1193,但我看不到API代码).它似乎发生在访问树的最后一个叶节点上.
我很难确定问题所在.使用C API进行递归是否有任何特殊注意事项?我不确定我是否需要使用Py_INCREF/Py_DECREF,或者使用这些函数.我并不完全理解API的工作原理.任何帮助深表感谢!
编辑:一些最小的代码:
void VisitTree(PyObject* py_tree) throw (Python_exception)
{
PyObject* attr = PyString_FromString("children");
if (PyObject_HasAttr(py_tree, attr)) // segfault on last visit
{
PyObject* list = PyObject_GetAttr(py_tree,attr);
if (list)
{
int size = PyList_Size(list);
for (int i=0; i<size; i++)
{
PyObject* py_child = PyList_GetItem(list,i);
PyObject *cls = PyString_FromString("ExpressionTree");
// check …
Run Code Online (Sandbox Code Playgroud) 例:
A myfunction() { return A(); }
A a = myfunction(); // default ctor only (return value optimization)
a = myfunction(); // default ctor and operator=
Run Code Online (Sandbox Code Playgroud)
为什么编译器不能将新对象写入现有对象?我相信一个类的所有实例占用相同数量的(非动态)内存,所以我不明白为什么这会是一个问题.
我正在使用 React Native (noob),我在 Android 上遇到了如下崩溃:
libc: Fatal signal 11 (SIGSEGV), code 1 (mqt_native_modu)
Run Code Online (Sandbox Code Playgroud)
这个模块是什么mqt_native_modu
?它是核心反应本机库吗?
我在使用第三方库时遇到这些崩溃,否则通过 react native 在 Android 和 iOS 上都可以正常工作。所以我想知道:这只是 React Native 的问题(在这种情况下我不得不举手等待 Facebook 的修复)还是有其他一些可能的方法来解决它?
c++ ×2
android ×1
c-api ×1
crash ×1
if-statement ×1
python ×1
react-native ×1
recursion ×1
rvo ×1