Эта программа отлично компилируется:
#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
Просто используйте
#include <cstdio>
http://en.cppreference.com/w/cpp/header/cstdio
Этот заголовок официально обязан объявлять все декларации библиотеки C в пространстве имен std
.
Однако, если у вас есть "проблема", требующая этих "решений", на самом деле просто пространство имен вашего собственного материала. Если на самом деле это Boost, который загрязняет глобальное пространство имен, тогда создайте ошибку.
ncurses
не является стандартным заголовком, вероятно, будет работать включение в пространство имен. стандарт явно запрещает делать что-либо перед включением стандартного заголовка, который меняет его значение.