【发布时间】:2017-11-06 15:10:13
【问题描述】:
我正在尝试使用 C++ 解析 JSON。我的 Makefile 如下所示:
LDFLAGS = -L/home/ting/Temp/code/jsoncpp/libs/linux-gcc-5.4.0/ ./jsoncpp/libs/linux-gcc-5.4.0/libjson.a ./jsoncpp/libs/linux-gcc-5.4.0/libjson.so
INC = -I/home/ting/Temp/code/jsoncpp/include/json
CC=g++
CFLAGS = -std=c++11
main: main.cpp
$(CC) -o $@ $(LDFLAGS) $(INC) $^ ${CFLAGS}
当我只是 #include "json.h" 时,编译器会给我一堆错误。我刚刚挑选了一些:
/usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h:44:19: error:
missing binary operator before token "("
#if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE)
^
In file included from /usr/include/c++/5/cwchar:44:0,
from /usr/include/c++/5/bits/postypes.h:40,
from /usr/include/c++/5/iosfwd:40,
from /usr/include/c++/5/ios:38,
from /usr/include/c++/5/istream:38,
from /usr/include/c++/5/fstream:38,
from main.cpp:1:
/usr/include/wchar.h:74:43: error: missing binary operator before token "("
看起来库没有任何错误。但这个问题只有在我链接到jsoncpp lib 并将其包含目录添加到 Makefile 时才会出现。
我很困惑;发生了什么?
【问题讨论】:
-
如果您需要有关代码的帮助,请发布。据我们所知,您并没有关闭某个名称空间,也没有关闭任何其他数量的语法错误,这些错误可能会级联到您发布的看似毫无意义的错误片段。
-
一般来说,选择“一些”错误并没有多大用处,因为很多错误可能会导致代码中看似不相关的部分出现其他错误。相反,您应该选择 first 错误,它更有可能成为真正的原因。
-
@underscore_d 嗨。代码很简单。我刚刚包括了标题。 #包括“json.h”。然后我有几页错误。这也是我说“一些错误”的原因,因为我不明白 GCC 想说什么。
-
@DanielH 你好。我发布的实际上是第一个错误,因为我在页面上出现错误,我无法理解 GCC 想说什么。所以我选择了“一些”这个词
-
旁注:
#include系统标头带有<brackets>,而不是"quotes"更习惯用法。这至少使您的意图更清晰,更容易区分本地与系统标头,并且还可以更改搜索顺序(尽管我认为这不是精确定义的)。