Массивы в VC++
От: spazhev_dima  
Дата: 15.05.07 06:17
Оценка:
Проблема: не могу разобраться, как сделать класс, содержащий член — массив нефиксированной длины. (MS VC++). Если делать массив локально в теле какой-нибудь функции, все работает:

    num_files = 0;   

    char path[255];
    GetCurrentDirectory(255, path);    
    strcat( path, PICTURE_LIST_FILEPATH );
    
    String* dirs[] = Directory::GetFiles(path);

    if (Directory::Exists(path))
        num_files = dirs->Length;

   // Массив нормально создается! // __gc насколько я понимаю здесь использовтать нобязательно,

    String *PictureFNames[] =  __gc new String*[num_files];   
                   
    Collections::IEnumerator* myEnum = dirs->GetEnumerator();
    int i=0;
    while (myEnum->MoveNext()) 
    {
        PictureFNames[i] =  dynamic_cast<String *>(myEnum->Current);     // В массив нормально пишется!            
        i++;
    }

   // Из массива нормально читается
    String * tmp_string = "";
    tmp_string = PictureFNames[1];

Но как только я выношу описание массива в свойства своего класса:


// .H
class TMyPicturesList
{
public:
    String *PictureFNames[];
    
    int num_files;
    TMyPicturesList();
};

// .CPP

TMyPicturesList::TMyPicturesList()
{
    num_files = 0;   

    char path[255];
    GetCurrentDirectory(255, path);    
    strcat( path, PICTURE_LIST_FILEPATH );

    String* dirs[] = Directory::GetFiles(path);

    if (Directory::Exists(path))
        num_files = dirs->Length;
    
    PictureFNames =  __gc new String*[num_files];
                   
    Collections::IEnumerator* myEnum = dirs->GetEnumerator();
    int i=0;
    while (myEnum->MoveNext()) 
    {
        PictureFNames[i] =  dynamic_cast<String *>(myEnum->Current);                
        i++;
    }

    String * tmp_string = "";
    tmp_string = PictureFNames[1];
    
    
    int a = 5; // debug    
    
};


, выдается ошибка: Cannot declare managed 'PictureFNames' in Unmanageg 'TMyPictureList'.

Массив я вероятно задаю не так, как надо. Пробовал добавить модификатор __gc к описанию класса (это далает его managed?),выдается другая ошибка -- 'MyPictureList' : cannot declare a global or static managed type object or a __gc pointer в строке, где объявляется глобальна переменная -- экземпляр моего класса:

TMyPicturesList * MyPictureList = NULL;


В общем, я запутался и разобраться, в чем суть этих managed и не managed данных, и как сделать массивы, у меня не получается.

----------------------------------------------
p.s.
1) знаком с Microsoft Vusial C++ примерно третий день, соответственно это диалект C++ знаю плохо, отсюда мои проблемы.
2) На форуме ответ поискал, не нашел
3) Нет, книги по MS VC++ у меня нет
4) HELP почитал, но не понял
5) сделать поделку нужно срочно, поэтому и не разбираюсь сам, а обращаюсь за помощью.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.