我试图端口/构建G ++到我的系统上运行,并且运行到以下错误,而建设的libstdC++:将大括号初始化列表转换为类型的错误含义?
.../gcc-4.6.2/i686-pc-linux-gnu/libstdc++-v3/include/mutex:226:50: error: could not convert '{0}' from '
<brace-enclosed initializer list>
' to 'std::timed_mutex::__native_type {aka pthread_mutex_t}
'
在include/mutex
相关的代码是:
class timed_mutex
{
// ...
__native_type _M_mutex;
// ...
timed_mutex() : _M_mutex(__GTHREAD_MUTEX_INIT) { } // Line 226
// ...
}
__native_type
是pthread_mutex_t
和__GTHREAD_MUTEX_INIT
扩展为{0}
。
我对C++并不是很熟悉,只是C,但我在这里看不到任何明显的错误。错误是什么意思?
此代码是libstdC++的一部分,而不是我写的代码。实际上,我只是通过将定义从“{0}”更改为“{{{0}}}”来实现它,但我有点困惑为什么大括号级别很重要。这是C++与C不同的地方吗? – 2012-03-01 03:39:02
@R,我已经更新了答案。请注意,'pthread_mutex_t'是一个包含3个元素的'union'。可能你的编译器比较老,或者不支持一些g ++扩展。 – iammilind 2012-03-01 03:45:20
你假设'pthread_mutex_t'的特定实现;我正在向一个不同的系统移植。 – 2012-03-01 04:14:49