我正在尝试使用FuzzyLite C库加载.fis
文件并在C代码中使用它。我使用的是C++ 14、Visual Studio 17.5.0和Visual C++ 2022。
按照入门指南,它将是:
#include <iostream>
#include <fl/Headers.h>
#include <fstream>
int main()
{
const std::string filePath = "C:\\Users\\me\\fuzzyLogic\\rules.fis";
fl::Engine* engine = new fl::Engine;
try
{
engine = fl::FisImporter().fromFile(filePath);
}
catch (fl::Exception& e)
{
std::cerr << e.what() << std::endl;
}
std::string status;
if (not engine->isReady(&status))
throw Exception("[engine error] engine is not ready:n" + status, FL_AT);
else
std::cout << "ok" << std::endl;
}
我下载了完整的库源代码,并使用build.bat
在发布模式下编译它。然后尝试运行上面的代码,但得到了错误:
[file error] file <> could not be opened
{at \src\imex\Importer.cpp::fl::Importer::fromFile() [line:31]}
Visual Studio debugger会抛出以下命令:
Exception thrown at 0x00007FFD5C55FE7C in FuzzyLiteTest.exe: Microsoft C++ exception: fl::Exception at memory location 0x0000009F9539F5B0.
Exception thrown: read access violation.
**_Pnext** was 0xFFFFFFFFFFFFFFFF.
然后我在第31行打开Importer.cpp
,它正在检查是否可以从路径打开读取器:
Engine* Importer::fromFile(const std::string& path) const {
std::ifstream reader(path.c_str());
if (not reader.is_open()) {
throw Exception("[file error] file <" + path + "> could not be opened", FL_AT);
}
std::ostringstream textEngine;
std::string line;
while (std::getline(reader, line)) {
textEngine << line << std::endl;
}
reader.close();
return fromString(textEngine.str());
}
好吧,我想我应该尝试以下方法:
- 使用字符串文字作为文件路径:没有用。
- 使用相对文件路径:没有用。
- 与文件路径相关的任何内容都不起作用,因为文件是好的,我可以使用其他任何东西(如
fstream
)访问其内容。
所以我修改了Importer
来输出它接收到的字符串:
Engine* Importer::fromFile(const std::string& path) const {
std::cout << "path: " << path << '\n';
std::cout << "path.c_str(): " << path.c_str() << '\n';
std::ifstream reader(path.c_str());
if (not reader.is_open()) {
throw Exception("[file error] file <" + path + "> could not be opened", FL_AT);
}
std::ostringstream textEngine;
std::string line;
while (std::getline(reader, line)) {
textEngine << line << std::endl;
}
reader.close();
return fromString(textEngine.str());
}
重新构建了库,我尝试再次运行。然后得到以下输出:
path:
path.c_str(): ©÷9òƒ
[file error] file <> could not be opened
{at \src\imex\Importer.cpp::fl::Importer::fromFile() [line:33]}
它看起来损坏或类似的东西。我试图在源文件中搜索,但找不到任何地方的路径被传递到以及。任何线索?这是我做的事情吗?
1条答案
按热度按时间snvhrwxg1#
我发现了问题:不兼容的项目和库配置。我使用的是在发布模式下编译的库,而我的项目处于调试模式。它们需要处于相同的模式。
更多信息:here