2013-11-15 44 views
0

我有包含如下載體的結構: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(); 

} 
+0

第一行試圖使第一要素的實際拷貝,而第二行有效地只需要第一個元素的地址的副本。 所以,問題可能出在副本... – user1793036

回答

0

第一行不起作用,因爲您省略了第二個pa CARRAY定義的rameter:

CArray<MyType, MyType> myArray; 

該參數定義了(如果我沒看錯),你是如何訪問數組元素。省略它,編譯器得到默認值:

CArray<MyType, MyType&> myArray; 

這應該是首先不起作用的原因,後者是。

UPDATE:

我試過你的代碼,...如果你做這些修正它的工作原理:

class MyClass{ 
public: 
struct MY_ANOTHER_STRUCT 
{ 
     float foo; 
}; 
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 
MyClass::MY_STRUCT structVariable = myClass.arMyStruct[0]; 

// When trying to access CArray element from below function, 
// gives access violation error message 
myClass.function(); 
} 
+0

我已經嘗試使用CARRAY myArray的;並得到相同的結果 –

+0

Lemme寫下一些代碼。 – IssamTP

+0

「My_Another_Struct」裏面有什麼? – IssamTP