Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Multiple definition of 'main'  (Прочитано 16472 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« : 07-10-2009 07:01 » 

Добрый день!
Столкнулся со следующей проблемой... Код:
Код:
   ...
    DIR * orig;
    struct dirent * drn1;
    ...
    while((drn1 = readdir(orig))!=NULL)
    {
        cout << drn1->d_name << '\n';
    }
На это пишет  multiple definition of `main' ,  first defined here и  ld returned 1 exit status (номер строки не указывается). Что компилятору не нравиться?

P.S. Кстати, код с Википедии отказывается запускать точно также (http://en.wikipedia.org/wiki/Dirent.h).
« Последнее редактирование: 07-10-2009 07:19 от Вад » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 07-10-2009 07:06 » 

main находится не в том коде, который ты привёл. Значит и ошибка находится не в том фрагменте, на который ты думаешь.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 07-10-2009 07:15 » 

А, понял: у меня в проекте два ССР - один настоящий, а другой я создал для проверки и демонстрации кода с Википедии. Вот он и не может понять, какой main запускать. Уже исправил, всё работает.

P.S. Разве так сложно написать (компилятору), что он не знает какой main запустить, потому что их больше одного в проекте... Криворукие программисты  Я зол!
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 07-10-2009 07:18 » 

Разве так сложно написать (компилятору), что он не знает какой main запустить, потому что их больше одного в проекте...
Inkognito, в C# это можно сделать директивой компилятора. В C++ не то чтобы нельзя указать, какой запускать. Скорее, нельзя вообще иметь 2 main на этапе линковки Улыбаюсь
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #4 : 07-10-2009 08:10 » 

Вот натолкнулся на проблему: знаю путь к папке, но как проверить, что это именно папка, а не файл?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #5 : 07-10-2009 08:24 » 

надо сделать поиск файла с именем

Код:
путь_к_папке\*

если найдётся, значит "путь_к_папке" - это папка
Записан

Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #6 : 07-10-2009 08:28 » 

Спасибо! Интересный способ.  Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #7 : 07-10-2009 08:28 » 

вернее, не так: это поиск ВСЕХ файлов в папке , а если папка пуста, то будет найдено 0 файлов. Однако не произойдёт ошибки в имени пути, как это было бы, если это файл, а не папка
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #8 : 08-10-2009 02:59 » 

P.S. Разве так сложно написать (компилятору), что он не знает какой main запустить, потому что их больше одного в проекте... Криворукие программисты  Я зол!

а это что написано?
  multiple definition of `main' ,   first defined here

научись читать. умник нашелся.
можешь спросить, а где номер строчки? и я тебе отвечу, линкер не обязан быть в курсе каким образом были получены объектные файлы, точнее компиляция какой комбинации исходных кодов привела к появлению этих файлов, за это отвечает компилятор.

Вот натолкнулся на проблему: знаю путь к папке, но как проверить, что это именно папка, а не файл?

если линукс, то используем stat
во кусок из BOOST
Код:
      status_api( const std::string & ph, error_code & ec )
      {
        struct stat path_stat;
        if ( ::stat( ph.c_str(), &path_stat ) != 0 )
        {
          if ( errno == ENOENT || errno == ENOTDIR )
          {
            ec = ok;
            return fs::file_status( fs::file_not_found );
          }
          ec = error_code( errno, system_category );
          return fs::file_status( fs::status_unknown );
        }
        ec = ok;
        if ( S_ISDIR( path_stat.st_mode ) )
          return fs::file_status( fs::directory_file );
        if ( S_ISREG( path_stat.st_mode ) )
          return fs::file_status( fs::regular_file );
        if ( S_ISBLK( path_stat.st_mode ) )
          return fs::file_status( fs::block_file );
        if ( S_ISCHR( path_stat.st_mode ) )
          return fs::file_status( fs::character_file );
        if ( S_ISFIFO( path_stat.st_mode ) )
          return fs::file_status( fs::fifo_file );
        if ( S_ISSOCK( path_stat.st_mode ) )
          return fs::file_status( fs::socket_file );
        return fs::file_status( fs::type_unknown );
      }

есть такой кусок для винды, но принцип тот же:
Код:
  template< class String >
  fs::file_status status_template( const String & ph, error_code & ec )
  {
    DWORD attr( get_file_attributes( ph.c_str() ) );
    if ( attr == 0xFFFFFFFF )
    {
      ec = error_code( ::GetLastError(), system_category );
      if ((ec.value() == ERROR_FILE_NOT_FOUND)
        || (ec.value() == ERROR_PATH_NOT_FOUND)
        || (ec.value() == ERROR_INVALID_NAME) // "tools/jam/src/:sys:stat.h", "//foo"
        || (ec.value() == ERROR_INVALID_PARAMETER) // ":sys:stat.h"
        || (ec.value() == ERROR_BAD_PATHNAME) // "//nosuch" on Win64
        || (ec.value() == ERROR_BAD_NETPATH)) // "//nosuch" on Win32
      {
        ec = ok; // these are not considered errors;
                           // the status is considered not found
        return fs::file_status( fs::file_not_found );
      }
      else if ((ec.value() == ERROR_SHARING_VIOLATION))
      {
        ec = ok; // these are not considered errors;
                           // the file exists but the type is not known
        return fs::file_status( fs::type_unknown );
      }
      return fs::file_status( fs::status_unknown );
    }
    ec = ok;;
    return (attr & FILE_ATTRIBUTE_DIRECTORY)
      ? fs::file_status( fs::directory_file )
      : fs::file_status( fs::regular_file );
  }
Записан

Странно всё это....
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #9 : 29-10-2009 12:15 » 

Вот натолкнулся на проблему: знаю путь к папке, но как проверить, что это именно папка, а не файл?
CFileFind для моей задачи подходит просто прекрасно.  Улыбаюсь
« Последнее редактирование: 29-10-2009 13:38 от Inkognito » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines