如何解决SimpleINI库-无法编译定义了SI_NO_CONVERSION的代码
// Defines the conversion classes for different libraries. Before including
// SimpleIni.h,set the converter that you wish you use by defining one of the
// following symbols.
//
// SI_NO_CONVERSION Do not make the "W" wide character version of the
// library available. Only CSimpleIniA etc is defined.
// SI_CONVERT_GENERIC Use the Unicode reference conversion library in
// the accompanying files ConvertUTF.h/c
// SI_CONVERT_ICU Use the IBM ICU conversion library. Requires
// ICU headers on include path and icuuc.lib
// SI_CONVERT_WIN32 Use the Win32 API functions for conversion.
当我尝试编译以下代码时:
#define SI_NO_CONVERSION
#include "SimpleIni.h"
int main()
{
CSimpleIni ini;
return 0;
}
我收到编译错误:‘CSimpleIniA’ was not declared in this scope
似乎在SimpleIni.h中未定义SI_NO_CONVERSION。你能解释发生了什么吗?
解决方法
SimpleIni.h
仅在定义SI_Case
,SI_NoCase
或SI_CONVERT_GENERIC
中的任何一个时定义SI_CONVERT_ICU
和SI_CONVERT_WIN32
。仅当定义SI_Case
时,SI_NoCase
和SI_NO_CONVERSION
仍未定义,这导致CSimpleIniTempl
模板实例化失败,并带有相关的编译错误。这是库中的疏忽/错误,应报告给作者。
作为一种解决方法,在#include "SimpleIni.h"
之前添加缺少的定义即可编译代码。
#define SI_NO_CONVERSION
#define SI_Case SI_GenericCase // ***
#define SI_NoCase SI_GenericNoCase // ***
#include "SimpleIni.h"
// ... etc ...
,
您包含的文档说明了一切:
仅在定义SI_NO_CONVERSION时定义CSimpleIniA等。
下面是README.md
中第一个示例的编辑版本。 SI_ASSERT宏在头文件中定义,但示例中引用的ASSERT_EQ和ASSERT_STREQ宏未定义。某人的示例无法编译几乎是不可原谅的。
正如我在评论中提到的那样,这不是一个维护良好的项目。构建和测试的说明不是很明显。似乎开发人员的工作副本中包含的文件不在git存储库中。不可原谅。
此外,当定义SI_NO_CONVERSION时,我还会收到其他编译错误。不要使用这个项目。改用其他东西。
#include "SimpleIni.h"
int main () {
CSimpleIniA ini;
ini.SetUnicode();
SI_Error rc = ini.LoadFile("example.ini");
if (rc < 0) { /* handle error */ };
const char* pv;
pv = ini.GetValue("section","key","default");
ini.SetValue("section","newvalue");
pv = ini.GetValue("section","default");
}
您可以使用g++
之类的语言进行编译。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。