所以我有一个困惑的问题,希望某些专家能够回答。我有一个结构,其中包含包含位集的结构和向量。这里不列出所有内容,但结构定义如下:
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
我的用法与上面的代码有何不同?
答案 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;
但是请记住,这是一个非常糟糕的风格