VS2010 C ++-通过引用传递结构的向量无法按预期工作

时间:2018-11-15 07:11:56

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

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

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

我在课堂上宣布一个载体。

vector<signal_data_t>           m_pSignalData;

然后我在调用一个函数时使用该向量,该函数应将其所有信息(正确执行)填充到该向量中。

CDlgStlFindProcedure mDlgStlFindProcedure(m_pSignalData, m_szVectorFilename);

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类何时完成设置了断点,并且m_pSignalData是正确的。我设置了断点返回时间,并且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

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

1 个答案:

答案 0 :(得分:1)

在构造函数中,您复制矢量,而不是引用。

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;

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