Ошибка: невозможно преобразовать 'dirent*' в 'каталоги поиска (std:: string, std:: list<start_tournament_info_t *>&, bool):: direct *'

Я пытаюсь скомпилировать этот проект Realtimebattle reloaded (github).

Но GCC выдает странную ошибку:

RealTimeBattle_reloaded/RealtimeBattle/original_gtk/src/Various.cc:473:30: error: cannot convert ‘dirent*’ to ‘search_directories(std::string, std::list<start_tournament_info_t*>&, bool)::direct*’ in assignment
       while( NULL != ( entry = readdir( dir ) ) )

И исходный код:

void
search_directories( string directory,
                    list<start_tournament_info_t*>& tour_list,
                    const bool check_robots )
{
  bool err_in_file = false;
  DIR* dir;
  if( NULL != ( dir = opendir(directory.c_str()) ) )
    {
      struct dirent* entry;
      while( NULL != ( entry = readdir( dir ) ) )
        {
          string full_file_name = directory + entry->d_name;
          bool res = false;
          if(check_robots)
            res = check_if_filename_is_robot(full_file_name, &err_in_file);
          else
            res = check_if_filename_is_arena(full_file_name, &err_in_file);
          if(res)
            {
              start_tournament_info_t* info;
              info = new start_tournament_info_t(0, false, full_file_name, "");
              tour_list.push_back( info );
            }
        }
      closedir(dir);
    }
}

Я очень запутался с журналом.

1 ответ

Оригинальная версия не использовала CMake: https://github.com/ezag/realtimebattle

Вероятно, это неполный порт для системы сборки CMake.

Здесь происходит то, что код зависит от макросов, определенных во время компиляции.

Размещение: "#define HAVE_DIRENT_H" в верхней части Various.cc, вероятно, сделает эту часть кода компилируемой... но, вероятно, есть больше проблем, чем просто один случай.

Другие вопросы по тегам