Я новичок в C++. Я создал для них следующую структуру и определения типов в заголовке:
Structures.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;
Итак, как мне добавить город из source.cpp, куда я включил Structures.h?
Если вы новичок в C++, почему вы используете MFC? Почему бы вместо этого не использовать стандартные типы и контейнеры C++? Предлагает ли MFC вам что-то, чего нет в стандартном языке? std :: vector <Cities> mycities; и mycities.push_back (Город ());
Что-то не так с пример перехода к MFS-контейнерам от MS?
то, что у вас есть в коде, - это типы, но, насколько я понимаю ваш вопрос, он касается определенных экземпляров этих типов. Совершенно непонятно, в чем проблема. Пожалуйста, предоставьте минимальный воспроизводимый пример
Даже Microsoft не использует контейнеры MFC в наши дни, по крайней мере, из того, что мне сказали. MFC появился в то время, когда не было стандартных контейнеров, поэтому MFC имел смысл. Но теперь контейнеры MFC заменены стандартными контейнерами.





CTypedPtrArray может сохранять только указатели для объектов. Вы пытаетесь хранить предметы.
Вероятно, вам не нужен CTypedPtrArray, а CArray.
typedef CArray<CITIES, CITIES> CCitiesDataArray;
...
CCitiesDataArray foo;
CITIES city = {1, 2, "SomeName", "SomeRegion"};
foo.Add(city);
...
Но вам, вероятно, лучше использовать контейнеры STL, такие как std::vector, вместо старых контейнеров MFC, которые устарели и не переносимы.
Потому что в университете это курсовая работа. Поэтому мне действительно нужно использовать контейнеры 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);
}
}
Что ты пробовал? Какие у вас проблемы с попытками? У вас есть Минимальный, полный и проверяемый пример, чтобы показать нам? А вы прочитали документация
CTypedPtrArray?