gpt4 book ai didi

c++ - 未声明 rapidjson 的 _snprintf?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:04 24 4
gpt4 key购买 nike

尝试在 CentOS 6.4 上构建时出现以下错误:此处传递的唯一标志是 -Wall 和 -std=c++11,使用 gcc 4.7.2

/usr/local/include/rapidjson/writer.h: In member function ‘void rapidjson::Writer::WriteDouble(double)’: /usr/local/include/rapidjson/writer.h:173:53: error: there are no arguments to ‘_snprintf’ that depend on a template parameter, so a declaration of ‘_snprintf’ must be available [-fpermissive] /usr/local/include/rapidjson/writer.h:173:53: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)

有问题的代码:(来自rapidjson/writer.h)

        void WriteDouble(double d) {
char buffer[100];
#if _MSC_VER
int ret = sprintf_s(buffer, sizeof(buffer), "%g", d);
#else
int ret = snprintf(buffer, sizeof(buffer), "%g", d); //this line is the troublemaker
#endif
RAPIDJSON_ASSERT(ret >= 1);
for (int i = 0; i < ret; i++)
stream_.Put(buffer[i]);
}

writer.h 文件的顶部如下所示:

#ifndef RAPIDJSON_WRITER_H_
#define RAPIDJSON_WRITER_H_

#include "rapidjson.h"
#include "internal/stack.h"
#include "internal/strfunc.h"
#include <cstdio> // snprintf() or _sprintf_s()
#include <new> // placement ne

这让我想到了这个问题:cstdio stdio.h namespace .

据我了解上述问题的答案,包含 cstdio 应该在标准命名空间中声明 snprintf 符号。所以,我想包含 stdio.h 来获取在全局命名空间中定义的符号。相同的编译错误结果,无论我是否包括 cstdio、stdio.h 或这两个文件(我不应该这样做)

我的问题分为两个部分:为什么 gcc 寻找 _snprintf 而不是 snprintf?或者我在错误的轨道上,这是否与 gcc 为模板参数绑定(bind)所做的两部分名称查找有关? (ala 10.8.2,http://idlebox.net/2009/apidocs/gcc-4.4.1.zip/gcc-4.4.1/gcc_10.html#SEC315)

最佳答案

您是否使用了 -ansi 编译标志?

使用 -ansi 通常表示您希望 header 仅公开C89标准中提到的接口(interface)。但是C89没有描述打印函数

关于c++ - 未声明 rapidjson 的 _snprintf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15767489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com