环境 Ubuntu 16.04 G ++ 5.3.1
我有一个头文件,其中包含一个不同的.h文件,具体取决于平台:
#ifdef _WIN32
#include "curses.h"
#else
#include <ncurses.h>
#endif
这在Windows中工作正常但在Ubuntu中我得到有关curses.h文件的错误:
In file included from /usr/include/unctrl.h:54:0,
from /usr/include/curses.h:1694,
from headers/command_window.h:8,
from command_window.cpp:1:
headers/curses.h:900:19: error: macro "clear" passed 1 arguments, but takes just 0
int clear(void);
编译时使用:
g++ -g -lncurses -std=c++11 -Iheaders -c -o command_window.o command_window.cpp
为什么headers / curses.h,这是PDCurses的Windows特定文件?这里有什么?
答案 0 :(得分:4)
/usr/include/unctrl.h
包含以下行:
#include <curses.h>
由于您已告诉编译器在headers/
文件夹中查找带有-Iheaders
标志的头文件,编译器会在该文件夹中选择curses.h
。
所以你需要删除-Iheaders
标志(例如使用#include“headers / header_name.h”)或者你需要重命名你的headers/curses.h
以免与/ usr / include / curses冲突.H
答案 1 :(得分:2)
在您的g ++版本中,-I
选项不是将特定于应用程序的头文件(系统头中#include
找不到的头文件)添加到搜索路径的正确方法(这种变化也让我感到惊讶)。
相反,您应该使用-iquote headers
。
请参阅此答案:How to tell g++ compiler where to search for include files?和此official documentation