小编pet*_*ohn的帖子

'从some_type**到const some_type**'的转换无效

我有一个需要const some_type**作为参数的函数(some_type是一个结构体,函数需要一个指向这种类型数组的指针).我声明了一个类型的局部变量some_type*,并初始化它.然后我将函数调用为f(&some_array),编译器(gcc)说:

error: invalid conversion from ‘some_type**’ to ‘const some_type**’
Run Code Online (Sandbox Code Playgroud)

这有什么问题?为什么我不能将变量转换为const?

c c++ gcc compiler-errors

8
推荐指数
1
解决办法
3256
查看次数

如何确定Perl中的变量是否为数字?

可能重复:
如何判断变量在Perl中是否具有数值?

我想确定变量(从字符串解析的值)是否为数字.我怎样才能做到这一点?好吧,我想/^[0-9]+$/会工作,但有更优雅的版本吗?

variables perl numbers

8
推荐指数
3
解决办法
5万
查看次数

如何有条件地将文件包含到Makefile中?

考虑以下Makefile:

# <include global configuration Makefile>

INCL = -I../include \
       -I<whatever>

CPPFLAGS=$(DEFS) $(INCL)
CXXFLAGS = -O0 -g -Wall -fmessage-length=0

SRCS = $(wildcard *.cpp)

OBJS = $(SRCS:.cpp=.o)

all: $(OBJS)

%.o: %.cpp
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<


depend: .depend

.depend: $(SRCS) 
    $(CPP) $(CPPFLAGS) -M $^ > $@

clean:
    rm -f $(OBJS)
    rm .depend


-include .depend
Run Code Online (Sandbox Code Playgroud)

此Makefile #include使用该g++ -M命令创建依赖关系链,并包含它.这可能是一个相当漫长的过程.问题是即使make clean被调用也会生成此文件,无论如何都会删除此文件.是否有条件地包含此文件,如果运行干净的目标,不打扰创建它?

c++ makefile

8
推荐指数
1
解决办法
3422
查看次数

用c ++打印完整的回溯

我想以类似于在gdb中完成的格式从Linux中的C++程序转储回溯.为此,我尝试使用backtrace()和backtrace_symbols()函数.这些返回的函数名称和偏移量.我可以使用__cxa_demangle()函数来获取可读的函数名称.

有没有办法获得文件/行位置,因为它是由gdb完成的?

c++ linux g++ backtrace

8
推荐指数
1
解决办法
2万
查看次数

异步等待直到套接字可用于在Asio中读/写

我想用Boost Asio做以下几点.我有一个套接字,我希望在数据可用于读取/写入套接字时注册要调用的回调,但我不希望它实际上进行读/写.基本上,我需要的是类似于async_read_some/ async_write_some,除了实际的读写没有完成.

我需要这个,因为我正在使用一个带有自己的读写函数的外部库,它需要一个套接字描述符作为输入参数,我想以异步方式使用这个库.

c++ boost boost-asio

8
推荐指数
1
解决办法
2644
查看次数

如何禁用 ipython 中的代码格式?

IPython 有这个新功能,可以重新格式化我的提示符。不幸的是,它确实有问题,所以我想禁用它。我在从命令行启动 IPython 时成功做到了这一点,方法是在我的 中添加以下行ipython_config.py

c.TerminalInteractiveShell.autoformatter = None
Run Code Online (Sandbox Code Playgroud)

但是,当我从 python 脚本运行它时,它不起作用。我通过以下方式从脚本启动 IPython:

c = traitlets.config.get_config()
c.InteractiveShellEmbed.colors = "Linux"
c.TerminalInteractiveShell.autoformatter = None
c.InteractiveShellEmbed.loop_runner = lambda coro: loop.run_until_complete(coro)
IPython.embed(display_banner='', using='asyncio', config=c)
Run Code Online (Sandbox Code Playgroud)

如果我更改该colors值,颜色也会相应更改,因此配置本身可以正常工作。然而,无论我如何处理autoformatter,IPython 都会自动格式化我的代码。我究竟做错了什么?

python ipython

8
推荐指数
1
解决办法
276
查看次数

vector <auto_ptr <>>的编译问题

请考虑以下代码:

#include <iostream>
#include <memory>
#include <vector>

using namespace std;

struct A
{
    int a;
    A(int a_):a(a_) {}
};

int main()
{
    vector<auto_ptr<A> > as;
    for (int i = 0; i < 10; i++)
    {
        auto_ptr<A> a(new A(i));
        as.push_back(a);
    }
    for (vector<auto_ptr<A> >::iterator it = as.begin(); it != as.end(); ++it)
        cout << (*it)->a << endl;
}
Run Code Online (Sandbox Code Playgroud)

在尝试编译它时,我从g ++中得到以下模糊的编译器错误:

g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/proba.d" -MT"src/proba.d" -o"src/proba.o" "../src/proba.cpp"
/usr/include/c++/4.1.2/ext/new_allocator.h: In member function ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp …
Run Code Online (Sandbox Code Playgroud)

c++ stl g++ vector auto-ptr

7
推荐指数
2
解决办法
6179
查看次数

如何将异常报告为boost :: future?

如果我使用Boost期货,并且未来报告为has_exception(),是否有任何方法可以检索该异常?例如,以下是以下代码:

int do_something() {
    ...
    throw some_exception();
    ...  
}

...

boost::packaged_task task(do_something);
boost::unique_future<int> fi=task.get_future();
boost::thread thread(boost::move(task));
fi.wait();
if (fi.has_exception()) {
    boost::rethrow_exception(?????);
}
...
Run Code Online (Sandbox Code Playgroud)

问题是,应该把什么放在"?????"?

c++ exception boost-thread

7
推荐指数
1
解决办法
1607
查看次数

将std :: pair迭代器转换为boost :: iterator_range

我有一个std::multimap,我想创建一个boost::iterator_rangeequal_range.我在文档中找不到简单的方法,所以我尝试了以下方法:

typedef std::multimap<int, std::string> Map;
Map map;
...
boost::iterator_range<Map::iterator> r(map.equal_range(2));
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,它的工作原理(使用GCC 4.1.2).我很好奇它是如何工作的.我发现iterator_range构造函数没有重载会发生这种情况,multimap::iterator_range显然没有返回Boost范围的重载.

c++ boost iterator boost-range

7
推荐指数
1
解决办法
2140
查看次数

跟踪进程和所有分叉进程的系统调用

我正在使用ptrace跟踪进程的系统调用.在分支过程之后,我PTRACE_TRACEME用来开始跟踪过程.代码如下所示:

while (true) {
    int status;
    int gotPid;
    gotPid = waitpid(pid, &status, 0);

    if (WIFEXITED(status) || WIFSIGNALED(status)) {
        break;
    }

    if (WIFSTOPPED(status)) {
        handleTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后有handleTrace功能,看起来像这样.

long syscall;
syscall = ptrace(PTRACE_PEEKUSER,
     pid, 8 * ORIG_RAX, NULL);

// do something with the syscall

// continue program
ptrace(PTRACE_SYSCALL, pid, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但如果程序分叉(或创建一个新线程),我还想跟踪跟踪进程创建的子进程(以及进程创建的线程).我知道它可以使用PTRACE_O_TRACEFORK,PTRACE_O_TRACEVFORK并且PTRACE_O_TRACECLONE,但是从man文档中,很难弄清楚它是如何完成的.我需要一些这方面的例子.

编辑:

我在这里找到了一个类似的问题:如何ptrace多线程应用程序?我用以下代码尝试了它.此代码跟踪已启动进程的系统调用,并且它也应该跟踪分叉进程.它fork()在父进程中运行(子进程调用a PTRACE_TRACEME和a exec()).

EDIT2:

我对代码做了一些修改,取得了一些进展.

long orig_eax;
int …
Run Code Online (Sandbox Code Playgroud)

c c++ linux ptrace fork

7
推荐指数
1
解决办法
2941
查看次数