c++ initializer list issue - error: attempting to reference a deleted function

c++ initializer list issue - error: attempting to reference a deleted function

我是第一次在 c++ 中使用 VS (2015),并且是创建半途体面代码的新手。尝试做一些简单的事情 - 使用初始化列表......但它抛出了这个错误:"C2280: attempting to reference a deleted function"

我有 (User.h):

class User {
protected:
  ICoordinateMapper* _coordMapper;
public:
  User(ICoordinateMapper coordinateMapper)
    : _coordMapper(coordinateMapper){}
};

如果我按如下方式重载构造函数,运行没问题:

class User {
protected:
  ICoordinateMapper* coordinateMapper;
public:
  User(){}
  User(ICoordinateMapper* coordinateMapper)
    : _coordMapper(coordinateMapper){}
};

我的应用 运行(通过 openFrameworks)为:

#include "ofApp.h"
int main(){
  ... 
  ofRunApp(new ofApp());
}

ofApp.h:

#pragma once
#include "ofMain.h"
#include "User.h"
class ofApp : public ofBaseApp{
public:
  ...
  User user;
}

这是为什么?我以为我在使用初始化列表时不需要重载构造函数?还是我?

在第一个变体中,您没有 User 默认构造函数,编译器不会为您创建默认构造函数。这意味着无法默认构造(就像您在 ofApp class 中所做的那样)User class.

的对象

有两种方法可以解决这个问题:第一种你已经知道,那就是创建一个默认构造函数。作为此的变体,您可以通过使用

来使用编译器默认构造函数
class User {
  ...
  User() = default;
  ...
};

另一个解决方案是为另一个构造函数使用默认参数,因此可以像默认构造函数一样在没有参数的情况下调用它:

class User {
  ...
  User(ICoordinateMapper coordinateMapper = nullptr)
    : _coordMapper(coordinateMapper){}
  ...
};

我推荐第二种方式,因为它将初始化 _coordMapper 成员。