none
Программа возвращающая лист папок и лист файлов по заданному пути RRS feed

  • Вопрос

  • ref struct dirsfiles // объявляем структуру возвращаемую функцией
    { 
        array<DirectoryInfo^>^ list_dirs;
        array<FileInfo^>^ list_files;
    };
    dirsfiles getdirsfiles(String^ dirPath) // dirPath - входной путь
    {
       System::IO::DirectoryInfo ^ dirs;
       dirs = gcnew System::IO::DirectoryInfo(dirPath);
       dirsfiles ff; // list folders and list files
       ff.list_dirs = dirs->GetDirectories(); // заполняем поля структуры
       ff.list_files = dirs->GetFiles();
       return ff;
    }

    получаю ошибку на строке 'return ff;'   

    error C2440: 'return' : cannot convert from 'dirsfiles' to 'dirsfiles'

    Подскажите в чем моя ошибка?

    26 декабря 2012 г. 16:04

Ответы

  • Привет

    Это связано с ссылочными типами и ключевым словом ref. Если вы объявляете структуру как ссылочную (используя ref), то и возвращать нужно ссылку:

    	 dirsfiles^ getdirsfiles(String^ dirPath) // dirPath - входной путь
    		{
    			System::IO::DirectoryInfo ^ dirs;
    			dirs = gcnew System::IO::DirectoryInfo(dirPath);
    			dirsfiles^ ff; // list folders and list files
    			ff.list_dirs = dirs->GetDirectories(); // заполняем поля структуры
    			ff.list_files = dirs->GetFiles();
    			return ff;
    		}

    Иначе, вам нужно объявить ее как значимую и не менять код функции получения этой структуры:
    	value struct dirsfiles // объявляем структуру возвращаемую функцией
    	{ 
    		array<DirectoryInfo^>^ list_dirs;
    		array<FileInfo^>^ list_files;
    	};


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 29 декабря 2012 г. 7:44
    • Снята пометка об ответе tur91 30 декабря 2012 г. 8:15
    • Помечено в качестве ответа tur91 30 декабря 2012 г. 8:16
    • Снята пометка об ответе tur91 30 декабря 2012 г. 11:05
    • Предложено в качестве ответа YatajgaEditor 30 декабря 2012 г. 21:13
    • Отменено предложение в качестве ответа tur91 9 января 2013 г. 16:45
    • Помечено в качестве ответа tur91 9 января 2013 г. 16:45
    27 декабря 2012 г. 13:19

Все ответы

  • Подозрение, что массив String() полученный из GetDirectories не получается привести к array

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Изменено LXGDARKEditor 26 декабря 2012 г. 16:20
    26 декабря 2012 г. 16:19
    Отвечающий
  • Привет

    Это связано с ссылочными типами и ключевым словом ref. Если вы объявляете структуру как ссылочную (используя ref), то и возвращать нужно ссылку:

    	 dirsfiles^ getdirsfiles(String^ dirPath) // dirPath - входной путь
    		{
    			System::IO::DirectoryInfo ^ dirs;
    			dirs = gcnew System::IO::DirectoryInfo(dirPath);
    			dirsfiles^ ff; // list folders and list files
    			ff.list_dirs = dirs->GetDirectories(); // заполняем поля структуры
    			ff.list_files = dirs->GetFiles();
    			return ff;
    		}

    Иначе, вам нужно объявить ее как значимую и не менять код функции получения этой структуры:
    	value struct dirsfiles // объявляем структуру возвращаемую функцией
    	{ 
    		array<DirectoryInfo^>^ list_dirs;
    		array<FileInfo^>^ list_files;
    	};


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 29 декабря 2012 г. 7:44
    • Снята пометка об ответе tur91 30 декабря 2012 г. 8:15
    • Помечено в качестве ответа tur91 30 декабря 2012 г. 8:16
    • Снята пометка об ответе tur91 30 декабря 2012 г. 11:05
    • Предложено в качестве ответа YatajgaEditor 30 декабря 2012 г. 21:13
    • Отменено предложение в качестве ответа tur91 9 января 2013 г. 16:45
    • Помечено в качестве ответа tur91 9 января 2013 г. 16:45
    27 декабря 2012 г. 13:19