Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Ошибка с компиляцией. program_options


Автор: Хоббит 12.2.2009, 09:37
Есть небольшая программа.
Код

#include <iostream>
#include <cstdlib>
#include <boost/program_options/options_description.hpp>
#include <boost/program_options/parsers.hpp>
#include <boost/program_options/variables_map.hpp>

using namespace std;
namespace po = boost::program_options;

int main(int argc, char *argv[])
{
  po::options_description optionsDescription("Allowed options");
    optionsDescription.add_options()
    ("help", "Thil help message.")
    ("command,c", po::value<string>()->default_value(""), "command");

    po::positional_options_description pd;
    pd.add("command", 1);

    // Сохраняем аргументы.
    po::variables_map variableMap;

    try
    {
        po::store(po::command_line_parser(argc, argv).
        options(optionsDescription).positional(pd).run(), variableMap);

        po::notify(variableMap);
    }
    catch (...)
    {
        cout << optionsDescription << endl;
        return EXIT_FAILURE;
    }
    
    if (variableMap.count("help"))
        {
            cout << optionsDescription << endl;
            return EXIT_SUCCESS;
        }

  return EXIT_SUCCESS;
}


На моем компьютере компилируется. Компилирую в kdevelop.

Переношу проект на удаленный сервер, на стадии make вылетает такая ошибка.
Компилирую
make -f Makefile.cvs
cd debug; 
configure;
make -k;
(выполняю те же команды что и kdevelop)

Код


[ivanov@c3 progopt]$ cd debug; make -k;
make  all-recursive
make[1]: Entering directory `/home/ivanov/develop/progopt/debug'
Making all in src
make[2]: Entering directory `/home/ivanov/develop/progopt/debug/src'
if g++ -DHAVE_CONFIG_H -I. -I/home/ivanov/develop/progopt/src -I..     -O0 -pg -g3 -lmysqlclient -MT progopt.o -MD -MP -MF ".deps/progopt.Tpo" -c -o progopt.o /home/ivanov/develop/progopt/src/progopt.cpp; \
then mv -f ".deps/progopt.Tpo" ".deps/progopt.Po"; else rm -f ".deps/progopt.Tpo"; exit 1; fi
/home/ivanov/develop/progopt/src/progopt.cpp: In function `int main(int, char**)':
/home/ivanov/develop/progopt/src/progopt.cpp:30: error: aggregate `boost::program_options::positional_options_description pd' has incomplete type and cannot be defined
/home/ivanov/develop/progopt/src/progopt.cpp:39: error: no matching function for call to `boost::program_options::basic_command_line_parser<char>::positional(<type error>)'
/usr/include/boost/program_options/detail/parsers.hpp:57: note: candidates are: boost::program_options::basic_command_line_parser<charT>& boost::program_options::basic_command_line_parser<charT>::positional(const boost::program_options::positional_options_description&) [with charT = char]
make[2]: *** [progopt.o] Ошибка 1
make[2]: Цель `all' не была пересобрана из-за ошибок.
make[2]: Leaving directory `/home/ivanov/develop/progopt/debug/src'
make[2]: Entering directory `/home/ivanov/develop/progopt/debug'
make[2]: Цель `all-am' не требует выполнения команд.
make[2]: Leaving directory `/home/ivanov/develop/progopt/debug'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/home/ivanov/develop/progopt/debug'
make: *** [all] Ошибка 2


Кажется самое важное вот это
error: aggregate `boost::program_options::positional_options_description pd' has incomplete type and cannot be defined
Что делать?
boost на компьютере есть, и библиотека подключена к программе. Проблема именно с positional_options.

Добавлено через 2 минуты и 4 секунды
Если компилировать только входной файл, вот что выходит

[ivanov@c3 src]$ g++ progopt.cpp
progopt.cpp: In function `int main(int, char**)':
progopt.cpp:30: error: aggregate `boost::program_options::positional_options_description pd' has incomplete type and cannot be defined
progopt.cpp:39: error: no matching function for call to `boost::program_options::basic_command_line_parser<char>::positional(<type error>)'
/usr/include/boost/program_options/detail/parsers.hpp:57: note: candidates are: boost::program_options::basic_command_line_parser<charT>& boost::program_options::basic_command_line_parser<charT>::positional(const boost::program_options::positional_options_description&) [with charT = char]

Автор: xvr 12.2.2009, 12:49
Версия boost'а таже?

Автор: Хоббит 12.2.2009, 13:41
Как проверить версию boost? В каком файле?

Автор: vinick 12.2.2009, 17:20
версия буста лежит в boost/version.hpp
У меня на 1.35 твой пример нормально собирается.

И по хорошему надо тебе <boost/program_options.hpp> подключить

Автор: Хоббит 12.2.2009, 23:31
smile
И правда #include <boost/program_options.hpp> помогло... и как я не догадался. А на моем компьютере все собирается без него.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)