如何使用 CTypedPtrArray
How to use a CTypedPtrArray
本文关键字:CTypedPtrArray 何使用 更新时间:2023-10-16
我是C++的新手。我在标头中为它们创建了以下结构和类型定义:
结构.h
#pragma once
#include <afxtempl.h>
struct CITIES
{
int nId;
int nUpdateCounter;
CString strCityName;
CString strCityRegion;
};
struct PERSONS
{
int nId;
int nUpdateCounter;
CString strFirstName;
CString strMiddleName;
CString strLastName;
CString strUCN;
int nCityId;
CString strAddress;
};
struct PHONE_NUMBERS
{
int nId;
int nUpdateCounter;
int nPersonId;
int nPhoneTypeId;
CString strPhone;
};
struct PHONE_TYPES
{
int nId;
int nUpdateCounter;
CString strPhoneType;
};
typedef CTypedPtrArray<CPtrArray, CITIES> CCitiesDataArray;
typedef CTypedPtrArray<CPtrArray, PERSONS> CPersonsDataArray;
typedef CTypedPtrArray<CPtrArray, PHONE_NUMBERS> CPhoneNumbersDataArray;
typedef CTypedPtrArray<CPtrArray, PHONE_TYPES> CPhoneTypesDataArray;
那么如何从源中添加一个城市.cpp其中我包含了结构.h?
CTypedPtrArray
只能存储指向对象的指针。您正在尝试存储对象。
你可能不需要CTypedPtrArray
,但CArray
.
typedef CArray<CITIES, CITIES> CCitiesDataArray;
...
CCitiesDataArray foo;
CITIES city = {1, 2, "SomeName", "SomeRegion"};
foo.Add(city);
...
但是,您可能最好使用诸如std::vector
之类的STL容器,而不是旧的MFC容器,这些容器是老式的,不可移植的。
添加指向类/结构名称的指针,例如:
typedef CTypedPtrArray<CPtrArray, CITIES*> CCitiesDataArray;
void test()
{
CCitiesDataArray data;
data.Add(new CITIES{ 100,200,_T("city1"),_T("region1") });
//or
CITIES *ptr = new CITIES;
ptr->nId = 102;
ptr->nUpdateCounter = 202;
ptr->strCityName = _T("city2");
ptr->strCityRegion = _T("region2");
data.Add(ptr);
//do something...
//cleanup:
while(data.GetCount())
{
delete data.GetAt(0);
data.RemoveAt(0);
}
}