Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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++ 试图引用原子c+;的已删除函数+;_C++_Visual Studio_Atomic - Fatal编程技术网

C++ 试图引用原子c+;的已删除函数+;

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

我有一段用于Visual Studio 2013的代码。现在我正试图在VisualStudio2017中构建相同的代码,它抱怨道。这是我正在尝试的代码

#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修复程序后立即消失。我应该担心吗?你的意思是你一直都在收到那个错误信息,并且不仅选择完全忽略它,而且不将它添加到你的问题中?为什么?我以为这两个人是有关系的