我几天前从Windows切换到了Linux,到目前为止很喜欢它。不幸的是我在移植项目时遇到了问题。在那里,我使用GLM进行矢量计算和原子一起使用。在Visual Studio上一切正常。
我遇到的第一个问题是,出于某种原因,只要我包含undefined referece to
标题,g ++ 4.6就会给我一个atomic
。然后我切换到g ++ 4.8,问题就消失了。但现在,只要我使用带有这样的矢量的原子:atomic<vec3>
,我就会遇到一个新问题。这就是g ++所说的:
/usr/include/c++/4.8/atomic|167|error: function ‘std::atomic<_Tp>::atomic() [with _Tp = glm::detail::tvec3<float>]’ defaulted on its first declaration with an exception-specification that differs from the implicit declaration ‘std::atomic<glm::detail::tvec3<float> >::atomic()’|
我不知道如何解决这个问题。我想尝试g ++ 4.9,但我甚至不知道怎么做到这一点。这是一个简单的代码,在我的机器上崩溃:
#include <iostream>
#include <glm.hpp>
#include <atomic>
using namespace std;
using namespace glm;
atomic<vec3> b;
int main(){
cout << "hello" << endl;
return 0;
}
我使用Code :: Blocks作为IDE。当我使用clang++
时,我得到的错误与g ++ 4.6相同。
答案 0 :(得分:1)
看起来tvec3<float>
不适合制作std::atomic
您需要检查tvec3<float>
是否实际满足TriviallyCopyable
概念中给出的所有约束:
<强>要求强>
否则使用单独的std::mutex
来保护容器免受并发访问。