Ошибка компиляции при включении boost / program_options.hpp

0

Эта программа отлично компилируется:

#include <iostream>

#include <stdio.h>

#include <boost/program_options.hpp>

int main(int argc, char* argv[]) {
    std::cout << "Hello world" << std::endl;
}

Эта программа дает длинную ошибку компиляции:

#include <iostream>

namespace cio {
#include <stdio.h>
}

#include <boost/program_options.hpp>

int main(int argc, char* argv[]) {
    std::cout << "Hello world" << std::endl;
}

Полный дамп ошибки компиляции: http://codepad.org/aIcQqkgH

Команда linux, которую я использую для компиляции программы, это: c++ -o main.cpp.o -c main.cpp

  • 0
    @hosch250 hosch250 Почему? namespace cio {#include <stdio.h>} работает просто отлично, как и следовало ожидать. Программа не может быть скомпилирована до тех пор, пока вы не добавите строку: #include <boost / program_options.hpp>
  • 1
    связанные: stackoverflow.com/questions/12324302/… (и многие другие). Короче говоря: не делай этого.
Теги:
gcc
boost

1 ответ

0
Лучший ответ

Просто используйте

#include <cstdio>

http://en.cppreference.com/w/cpp/header/cstdio

Этот заголовок официально обязан объявлять все декларации библиотеки C в пространстве имен std.

Однако, если у вас есть "проблема", требующая этих "решений", на самом деле просто пространство имен вашего собственного материала. Если на самом деле это Boost, который загрязняет глобальное пространство имен, тогда создайте ошибку.

  • 0
    Есть ли версия этого для ncurses? #include <cncurses>?
  • 0
    ncurses не является стандартным заголовком, вероятно, будет работать включение в пространство имен. стандарт явно запрещает делать что-либо перед включением стандартного заголовка, который меняет его значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню