我有包含如下載體的結構:CARRAY:不能分配從CARRAY返回到非參考變量變量
struct MY_STRUCT
{
LONG lVariable;
CString strVariable;
BOOL bVariable;
vector<MY_ANOTHER_STRUCT> vecAnotherStruct;
};
並且還我有用於存儲MY_STRUCT數據類型的CARRAY:
CArray<MY_STRUCT> arMyStruct;
我能夠MY_STRUCT的元素添加型成arMyStruct和所有我加入示PR的元素在「觀察」窗口中正常運行。當我嘗試從CARRAY獲得元素
出現問題。
// This line gives access violation error message.
MY_STRUCT structVariable = arMyStruct[0];
// This line work correctly
MY_STRUCT& structVariable = arMyStruct[0];
任何人都可以請指出爲什麼第一行不行?
編輯:
以下是進一步的細節,我認爲可能是有用的縮小問題:
我有一個包含一個類都MY_STRUCT和的定義arMyStruct爲請按照
class MyClass
{
struct MY_STRUCT
{
LONG lVariable;
CString strVariable;
BOOL bVariable;
vector<MY_ANOTHER_STRUCT> vecAnotherStruct;
};
CArray<MY_STRUCT> arMyStruct;
void function()
{
// This line gives access violation error message
// when trying to access from here
MY_STRUCT structVariable = arMyStruct[0];
}
};
void someFunction()
{
MyClass myClass;
MyClass::MY_STRUCT aStruct;
// initialize structure and add some data to vector
myClass.arMyStruct.Add(aStruct);
// This line work fine
// when trying to access from here
MY_STRUCT structVariable = arMyStruct[0];
// When trying to access CArray element from below function,
// gives access violation error message
myClass.function();
}
第一行試圖使第一要素的實際拷貝,而第二行有效地只需要第一個元素的地址的副本。 所以,問題可能出在副本... – user1793036