【问题标题】:Lambda error in code when making form and onload制作表单和加载时代码中的 Lambda 错误
【发布时间】:2017-02-17 07:50:07
【问题描述】:

我收到此错误:

IntelliSense:不存在从“lambda []void (Form::Form *arg1)->void”到“Form::OnLoad”的合适转换函数 c:\users\topkek\desktop\project\test\tset\测试\main.cpp

真正的错误:

错误 8 错误 C2440: 'type cast' : 无法从 '`anonymous-namespace'::' 转换为 'Form::OnLoad' c:\users\topkek\desktop\project\test\tset\tes‌​t \main.cpp

这是代码:

new Form::Form("TEST_MAIN", "Test main", (Form::OnLoad)[](Form::Form* arg1)->void {

form.h:

typedef void(*OnLoad)(Form*);
Form(const char* WindowClass, const char* Title, OnLoad Func = NULL);

Form.cpp:

Form::Form(const char* szWindowClass, const char* Title, OnLoad Func) {

【问题讨论】:

  • IntelliSense 消息不被视为“真实”错误消息。你能编译代码并发布编译器的“真实”错误消息吗?
  • 错误 8 错误 C2440: 'type cast' : 无法从 'anonymous-namespace'::' 转换为 'Form::OnLoad' c:\users\topkek\desktop\project \test\tset\test\main.cpp

标签: c++ visual-studio-2010 lambda


【解决方案1】:
(Form::OnLoad)[](Form::Form* arg1)->void { /*...*/ })

这是一个奇怪的 lambda :)

我不确定你到底想做什么,但你不需要 lambda:

auto f = new Form::Form("TEST_MAIN", "Test main", &Form::OnLoad);
                                                  ^^^^^^^^^^^^^
                                                  Address of function

如果你想要一个 lambda,去掉开头:

auto f = new Form::Form("TEST_MAIN", "Test main", [](Form::Form* arg1)->void {});

【讨论】:

  • auto f = new Form::Form("TEST_MAIN", "Test main", [](Form::Onload)->void {Form::Form* arg1});不工作自动 f = new Form::Form("TEST_MAIN", "Test main", &Form::OnLoad);这也不起作用,因为不允许使用类型名称
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 2016-03-02
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多