[英]Error compiler, cannot convert parameter 2 from MyStruct1 to const void*, for memcpy
[英]Why the MVS compiler can convert argument 'myStruct' to 'myStruct &'. And did not file error C2664: cannot convert 'myStruct' to 'myStruct &'
我有一个类,我使用std::mem_fn
在辅助函数之间进行选择。
m_funcContainer
deceleration 中丢失&
? 在代码&
使用已经注释掉/**/
myStruct/*&*/
std::map < std::string, std::function<void(const myClass*, myStruct/*&*/) >> m_funcContainer
(但在m_funcContainerInt
的情况下,编译器会引发编译错误)
错误 C2664:“void (int &) const”:无法将参数 1 从“int”转换为“int &”
为什么编译器可以在 std::function 中将参数 'myStruct' 转换为 'myStruct &'
我的简化代码是
myClass.h
#include <memory> #include <map> #include <functional> struct ExtraFlag { }; struct Flag { }; struct myStruct { std::shared_ptr<ExtraFlag> extraFlag; std::shared_ptr<Flag> flag; explicit myStruct() { } }; class myClass { private: std::map < std::string, std::function<void(const myClass*, myStruct/*&*/) >> m_funcContainer; std::map < std::string, std::function<void(const myClass*, int/*&*/) >> m_funcContainerInt; private: void funcMyStruct(myStruct& arg1) const; void funcInt(int& arg1) const; public: myClass(); };
myClass.cpp
#include "myClass.h" myClass::myClass() { m_funcContainer["func"] = std::mem_fn(&myClass::funcMyStruct); myStruct myStructInstance; m_funcContainer.at("func")(this, myStructInstance); int a; m_funcContainerInt["func"] = std::mem_fn(&myClass::funcInt); m_funcContainerInt.at("func")(this, a); } void myClass::funcMyStruct(myStruct& arg1) const {} void myClass::funcInt(int& arg1) const {}
编辑我正在 Microsoft Visual Studio 2013 上编译
您的问题是 MSVC2013 在其默认设置下不是 C++ 编译器。 它编译了一种与 C++ 密切相关的语言,但带有“扩展”。 你被其中之一咬了。
/Za
将关闭(大多数?)语言扩展,我相信包括导致您出现问题的那个。
我听说过一些随 MSVC(系统标头)一起提供的标头可能会出现问题/Za
。 而且,这是编译和测试代码/Za
关闭可能有意想不到的行为变化与/Za
打开。 默认情况下,我会将它包含在新文件或项目中,如果您有一个旧项目,请激活它并测试它不会导致问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.