Итак, у меня возникла озадачивающая проблема, на которую, надеюсь, некоторые эксперты смогут ответить.У меня есть структура, содержащая структуры и векторы, содержащие наборы битов.Не буду перечислять все здесь, но определение структуры выглядит следующим образом:
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 будет пустым.Я почти уверен, что правильно использую передачу по ссылке, поскольку использовал ее для ряда элементов, кроме векторов.Исследования здесь и в других местах показывают, что можно передавать векторы по ссылке, но это не работает в моем приложении.
Я могу изменить, чтобы передать по указателю, и тогда это сработает, но это кажется неуклюжимзатем переходя по ссылке.Какие-либо предложения?Я что-то не так делаю?
Заранее спасибо.
edit
Мне снимают голосование, что, я думаю, означает, что все думают, что это глупый вопрос, ноЯ очень смущен, почему.Ссылаясь на:
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
Чем мое использование отличается от кода выше?