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
成员。
我是第一次在 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
成员。