0

我有一个包含向量的结构,如下所示:

struct MY_STRUCT
{
    LONG lVariable;
    CString strVariable;
    BOOL bVariable;

    vector<MY_ANOTHER_STRUCT> vecAnotherStruct;
};

而且我还有一个用于存储MY_STRUCT数据类型的 CArray:

CArray<MY_STRUCT> arMyStruct;

我能够将MY_STRUCT类型的元素添加到arMyStruct 中,并且我添加的所有元素都正确显示在“监视”窗口中。

当我尝试从 CArray 获取元素时出现问题。

// This line gives access violation error message.
MY_STRUCT structVariable = arMyStruct[0]; 
// This line work correctly
MY_STRUCT& structVariable = arMyStruct[0];

谁能指出为什么第一行不起作用?

编辑 :

以下是我认为可能有助于缩小问题范围的更多细节:

我有一个包含MY_STRUCTarMyStruct定义的类,如下所示

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();

}
4

1 回答 1

0

第一行不起作用,因为您省略了 CArray 定义的第二个参数:

CArray<MyType, MyType> myArray;

该参数定义(如果我没记错的话),您如何访问数组元素。忽略它,编译器会得到默认值:

CArray<MyType, MyType&> myArray;

这应该是为什么第一个不起作用而后者是的原因。

更新:

我已经尝试了您的代码,并且...如果您进行以下更正,它将起作用:

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();
}
于 2013-11-15T10:29:18.230 回答