C++ 试图引用原子c+;的已删除函数+;
我有一段用于Visual Studio 2013的代码。现在我正试图在VisualStudio2017中构建相同的代码,它抱怨道。这是我正在尝试的代码C++ 试图引用原子c+;的已删除函数+;,c++,visual-studio,atomic,C++,Visual Studio,Atomic,我有一段用于Visual Studio 2013的代码。现在我正试图在VisualStudio2017中构建相同的代码,它抱怨道。这是我正在尝试的代码 #include <array> #include <atomic> int main() { using TrdRobotStateArray = std::array<std::atomic<double>, 6>; TrdRobotStateArray mCurrentPo
#include <array>
#include <atomic>
int main()
{
using TrdRobotStateArray = std::array<std::atomic<double>, 6>;
TrdRobotStateArray mCurrentPose = { 0.3 };
printf("%0.3f", mCurrentPose[0]);
return 0;
}
#包括
#包括
int main()
{
使用TrdRobotStateArray=std::array;
TrdRobotStateArray mCurrentPose={0.3};
printf(“%0.3f”,mCurrentPose[0]);
返回0;
}
有了这个,我得到了这个错误:
error C2280: 'std::atomic<double>::atomic(const std::atomic<double> &)': attempting to reference a deleted function
错误C2280:'std::atomic::atomic(const std::atomic&'):试图引用已删除的函数
我没有写这段代码,我试图读入原子变量。但我仍然不太确定这个错误到底是怎么回事。如能解释原子学,将不胜感激。谢谢
更新:
以下是此代码附带的所有错误和警告。因此,它将在未来帮助其他人
1>AtomicTest.cpp
1>AtomicTest.cpp(13): error C4839: non-standard use of class
'std::atomic<double>' as an argument to a variadic function
1>AtomicTest.cpp(13): note: the constructor and destructor will not be
called; a bitwise copy of the class will be passed as the argument
1>AtomicTest.cpp(11): note: see declaration of 'std::atomic<double>'
1>AtomicTest.cpp(13): error C2280: 'std::atomic<double>::atomic(const
std::atomic<double> &)': attempting to reference a deleted function
1>C:\Program Files (x86)\Microsoft Visual
Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\atomic(689):
note: see declaration of 'std::atomic<double>::atomic'
1>C:\Program Files (x86)\Microsoft Visual
Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\atomic(689):
note: 'std::atomic<double>::atomic(const std::atomic<double> &)': function
was explicitly deleted
1>AtomicTest.cpp(13): warning C4477: 'printf' : format string '%0.3f'
requires an argument of type 'double', but variadic argument 1 has type
'std::atomic<double>'
1>Done building project "AtomicTest.vcxproj" -- FAILED.
1>AtomicTest.cpp
1> AtomicTest.cpp(13):错误C4839:类的非标准使用
“std::atomic”作为变量函数的参数
1> cpp(13):注意:构造函数和析构函数不会
打电话;类的按位副本将作为参数传递
1> cpp(11):注:参见“std::atomic”的声明
1> cpp(13):错误C2280:'std::atomic::atomic(常量
std::atomic&'):尝试引用已删除的函数
1> C:\Program Files(x86)\Microsoft Visual
Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\atomic(689):
注:参见“std::atomic::atomic”的声明
1> C:\Program Files(x86)\Microsoft Visual
Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\atomic(689):
注意:'std::atomic::atomic(const std::atomic&'):函数
已明确删除
1> AtomicTest.cpp(13):警告C4477:“printf”:格式字符串“%0.3f”
需要类型为“double”的参数,但变量参数1的类型为
'标准::原子'
1> 已完成构建项目“AtomicTest.vcxproj”--失败。
原子变量不可复制
这是C++标准的要求,VisualStudio 2017是正确的。
< P> Atomic变量不是<强>可复制的< /强>< P>这是C++标准的要求,VisualStudio 2017是正确的。 < p>您必须明确地加载值,以便编译它:
printf("%0.3d", mCurrentPose[0].load());
否则,它将尝试为printf()复制原子变量本身,这显然不是目的。您必须明确加载该值才能编译它:
printf("%0.3d", mCurrentPose[0].load());
否则,它将尝试为printf()复制原子变量本身,这显然不是目的。好的,非常感谢。用于教育目的。为什么
mCurrentPose[0]
调用复制构造函数?使用原子对象有什么好处?顺便说一句,%f
用于打印浮点值,mCurrentPose[0]
不是浮点值。好的,非常感谢。用于教育目的。为什么mCurrentPose[0]
调用复制构造函数?使用原子对象有什么好处?顺便说一句,%f
用于打印浮点值,mCurrentPose[0]
不是浮点值。请稍候。。。实际上,此代码的第一条错误消息是错误C4839:非标准使用类'std::atomic'作为变量函数的参数
。如何调用编译器?.pS:我认为改进的错误消息被添加到Visual C++ 2017的最新版本中。看见您可能需要升级到最新版本。是的,我也收到了该错误,但它在我应用Jodocus修复程序后立即消失。我应该担心吗?你的意思是你一直都在收到那个错误信息,并且不仅选择完全忽略它,而且不将它添加到你的问题中?为什么?我以为这两个人是亲戚等等。。。实际上,此代码的第一条错误消息是错误C4839:非标准使用类'std::atomic'作为变量函数的参数
。如何调用编译器?.pS:我认为改进的错误消息被添加到Visual C++ 2017的最新版本中。看见您可能需要升级到最新版本。是的,我也收到了该错误,但它在我应用Jodocus修复程序后立即消失。我应该担心吗?你的意思是你一直都在收到那个错误信息,并且不仅选择完全忽略它,而且不将它添加到你的问题中?为什么?我以为这两个人是有关系的