初始化 class 的成员 std::vector 变量,它是 c++ 中的引用
Initializing a member std::vector variable of a class that is a reference in c++
父 class 有这个变量:
AutoAssignActionVector vAutoAssignActions = dlgSettings.AutoAssignActions();
... 其中 AutoAssignActionVector
是:using AutoAssignActionVector = std::vector<S_MWB_AUTO_ASSIGN_ACTION>;
.
现在,我想将这个向量作为参考传递给另一个class,因为另一个class需要修改它的属性。
所以,我将这个变量添加到另一个 class:
AutoAssignActionVector &m_vAutoAssignActions;
我的问题是它无法编译。目前子构造函数是:
CChristianLifeMinistryAutoAssignSelectNamesDlg::CChristianLifeMinistryAutoAssignSelectNamesDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_OUR_CHRISTIAN_LIFE_AND_MINISTRY_AUTO_ASSIGN_SELECT_NAME, pParent)
{
}
我得到一个错误是可以理解的:
error C2530: CChristianLifeMinistryAutoAssignSelectNamesDlg::m_vAutoAssignActions
: references must be initialized
我明白为什么会显示错误。但我无法将构造函数更改为:
CChristianLifeMinistryAutoAssignSelectNamesDlg::CChristianLifeMinistryAutoAssignSelectNamesDlg(CWnd* pParent /*=nullptr*/, AutoAssignActionVector &vAutoAssignActions)
: CDialogEx(IDD_DIALOG_OUR_CHRISTIAN_LIFE_AND_MINISTRY_AUTO_ASSIGN_SELECT_NAME, pParent)
, m_vAutoAssignActions(vAutoAssignActions)
{
}
...因为那时我得到另一个错误:
error C2548: CChristianLifeMinistryAutoAssignSelectNamesDlg::CChristianLifeMinistryAutoAssignSelectNamesDlg
: missing default argument for parameter 2
如何解决这个问题?如果它是一个指针,我可以使用 = nullptr
但当它是一个引用时??
我看到了类似的问题,并试图确定是否能解决我的问题:
交换构造函数参数:
class CChristianLifeMinistryAutoAssignSelectNamesDlg : public CDialogEx
{
CChristianLifeMinistryAutoAssignSelectNamesDlg(
AutoAssignActionVector &vAutoAssignActions,
CWnd* pParent = nullptr);
};
父 class 有这个变量:
AutoAssignActionVector vAutoAssignActions = dlgSettings.AutoAssignActions();
... 其中 AutoAssignActionVector
是:using AutoAssignActionVector = std::vector<S_MWB_AUTO_ASSIGN_ACTION>;
.
现在,我想将这个向量作为参考传递给另一个class,因为另一个class需要修改它的属性。
所以,我将这个变量添加到另一个 class:
AutoAssignActionVector &m_vAutoAssignActions;
我的问题是它无法编译。目前子构造函数是:
CChristianLifeMinistryAutoAssignSelectNamesDlg::CChristianLifeMinistryAutoAssignSelectNamesDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_OUR_CHRISTIAN_LIFE_AND_MINISTRY_AUTO_ASSIGN_SELECT_NAME, pParent)
{
}
我得到一个错误是可以理解的:
error C2530:
CChristianLifeMinistryAutoAssignSelectNamesDlg::m_vAutoAssignActions
: references must be initialized
我明白为什么会显示错误。但我无法将构造函数更改为:
CChristianLifeMinistryAutoAssignSelectNamesDlg::CChristianLifeMinistryAutoAssignSelectNamesDlg(CWnd* pParent /*=nullptr*/, AutoAssignActionVector &vAutoAssignActions)
: CDialogEx(IDD_DIALOG_OUR_CHRISTIAN_LIFE_AND_MINISTRY_AUTO_ASSIGN_SELECT_NAME, pParent)
, m_vAutoAssignActions(vAutoAssignActions)
{
}
...因为那时我得到另一个错误:
error C2548:
CChristianLifeMinistryAutoAssignSelectNamesDlg::CChristianLifeMinistryAutoAssignSelectNamesDlg
: missing default argument for parameter 2
如何解决这个问题?如果它是一个指针,我可以使用 = nullptr
但当它是一个引用时??
我看到了类似的问题,并试图确定是否能解决我的问题:
交换构造函数参数:
class CChristianLifeMinistryAutoAssignSelectNamesDlg : public CDialogEx
{
CChristianLifeMinistryAutoAssignSelectNamesDlg(
AutoAssignActionVector &vAutoAssignActions,
CWnd* pParent = nullptr);
};