Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::目标指针参数的线程错误_C++_C++14_Stdthread - Fatal编程技术网

C++ std::目标指针参数的线程错误

C++ std::目标指针参数的线程错误,c++,c++14,stdthread,C++,C++14,Stdthread,我有一个类似于以下的设置 A.hpp #include <thread> class A { static void foo(char*, char*); void bar() { char* char_start = (char*) malloc(100 * sizeof(char)); char* char_end = char_start + (100 * sizeof(char)) - 1; std::

我有一个类似于以下的设置

A.hpp

#include <thread>

class A {

    static void foo(char*, char*);

    void bar() {

        char* char_start = (char*) malloc(100 * sizeof(char));
        char* char_end = char_start + (100 * sizeof(char)) - 1;

        std::thread t(foo, char_start, char_end);
        t.join();

        return;
    }
};
int main() { 
    A.bar();            

    return 0;
}
我用

g++ -std=c++14 -pthread main.cpp
并获得:

usr/include/c++/4.9/functional: In instantiation of ‘struct std::_Bind_simple<void (*(long unsigned int*, char*, char*))(long unsigned int*, char*, char*, const bool&)>’:
/usr/include/c++/4.9/thread:140:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(long unsigned int*, char*, char*, const bool&); _Args = {long unsigned int*, char*, char*}]’
A.cpp:100:151:   required from here
/usr/include/c++/4.9/functional:1665:61: error: no type named ‘type’ in ‘class std::result_of<void (*(long unsigned int*, char*, char*))(long unsigned int*, char*, char*, const bool&)>’
typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                         ^
/usr/include/c++/4.9/functional:1695:9: error: no type named ‘type’ in ‘class std::result_of<void (*(long unsigned int*, char*, char*))(long unsigned int*, char*, char*, const bool&)>’
 _M_invoke(_Index_tuple<_Indices...>)
usr/include/c++/4.9/functional:在“struct std:_Bind_simple”的实例化中:
/usr/include/c++/4.9/thread:140:47:从'std::thread::thread(_-Callable&&,_-Args&&…[带_-Callable=void(&)(长无符号int*,char*,char*,const-bool&);_-Args={长无符号int*,char*,char}中需要
A.cpp:100:151:此处为必填项
/usr/include/c++/4.9/functional:1665:61:错误:在'class std::result_of'中没有名为'type'的类型
typedef typename result_of::type result_type;
^
/usr/include/c++/4.9/functional:1695:9:错误:在“class std::result_of”中没有名为“type”的类型
_M_invoke(_Index_tuple)
我无法解释这个错误。非常感谢您的帮助

编辑:很抱歉,我遗漏了
foo
还有一个默认bool参数设置为
false
。去掉默认参数,让我们对其进行编译。

A.bar()
不是有效的语言构造。只能在
A
的实例上调用
bar()
,不能在typename
A
上调用

通过改变

A.bar();          


通过提供
a::foo()
的虚拟实现,我能够构建并运行该程序。

请创建一个。您问题中的代码示例不会产生错误。您使用的是哪个版本的g++?如果您尝试
-std=c++11
,它会编译吗?@remyabel代码会按原样编译,使用@Columbo这是因为您更改了明显虚假的代码,即,为什么OP需要发布MCVE。@Columbo:代码完全不同。就像“我的屁股!值得解释为什么?
A a;
a.bar();