如何使用 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);
    }
}