VS2010 C++ - 按引用传递结构向量未按预期工作

VS2010 C++ - Passing Vector of Structures by Reference Not Working as Expected

所以我有一个困惑的问题,希望一些专家能够回答。我有一个包含结构的结构和包含位集的向量。这里不打算全部列出,但结构定义如下所示:

typedef struct _signal_data_t
{
    signal_map_t        sigMap;
    vector<sigDataType> vSignalData;
    vector<sigDataType> vChangeColor;
} signal_data_t;

我在 class 中声明了一个向量。

vector<signal_data_t>           m_pSignalData;

然后我在调用一个函数时使用这个向量,这个函数应该用它的所有信息填充这个向量(它正确地完成了)。

CDlgStlFindProcedure mDlgStlFindProcedure(m_pSignalData, m_szVectorFilename);

class CDlgStlFindProcedure 使用引用传递。 头文件:

CDlgStlFindProcedure(vector<signal_data_t> &pSignalData, CString szInfile, CWnd* pParent = NULL);   // standard constructor

Cpp 文件:

CDlgStlFindProcedure::CDlgStlFindProcedure(vector<signal_data_t> &pSignalData, CString szInfile,  CWnd* pParent /*=NULL*/)
    : CDialog(CDlgStlFindProcedure::IDD, pParent)
    , m_pSignalData(pSignalData)
{
    szFilename = szInfile;
}

我在 CDlgStlFindProcedure class 完成时设置了一个断点,并且 m_pSignalData 是正确的。我在returns和m_pSignalData为空的时候设置了一个断点。我很确定我正确地使用了按引用传递,因为我已经将它用于矢量以外的许多项目。在这里和其他地方的研究表明应该可以通过引用传递向量,但它在我的应用程序中不起作用。

我可以修改为通过指针传递然后它起作用,但这似乎比通过引用传递更笨拙。有什么建议么?我做错了什么吗?

提前致谢。

编辑

我被否决了,我想这意味着每个人都认为这是一个愚蠢的问题,但我很困惑为什么。参考:

https://www.geeksforgeeks.org/passing-vector-function-cpp/

// C++ program to demonstrate how vectors 
// can be passed by reference. 
#include<bits/stdc++.h> 
using namespace std; 

// The vect is passed by reference and changes 
// made here reflect in main() 
void func(vector<int> &vect) 
{ 
vect.push_back(30); 
} 

int main() 
{ 
    vector<int> vect; 
    vect.push_back(10); 
    vect.push_back(20); 

    func(vect); 

    for (int i=0; i<vect.size(); i++) 
    cout << vect[i] << " "; 

    return 0; 
} 

输出: 10 20 30

我的用法与上面的代码有何不同?

在你的构造函数中,你复制了向量,而不是引用。

CDlgStlFindProcedure::CDlgStlFindProcedure(vector<signal_data_t> &pSignalData, CString szInfile,  CWnd* pParent /*=NULL*/)
: CDialog(CDlgStlFindProcedure::IDD, pParent)
, m_pSignalData(pSignalData) // copying pSignalData into m_pSignalData

如果您确实需要参考,请这样做:

vector<signal_data_t> &m_pSignalData;

但是请记住,这是一种非常糟糕的风格