c++ - 在 C++ 中从 C 库中声明和访问结构
问题描述
我正在使用一个 C 库,它有一个名为 dataSet 的结构,该结构在整个库中使用。我可以在我的 C++ 代码中声明该结构并将其传递给 C 库中的方法,它工作正常,但我不知道如何在 C++ 中访问此结构中的项目,因为我遇到读取文件访问冲突。我不确定我是否应该以某种方式使用 extern 命令。
主.cpp:
#include <iostream>
#include "cgp.h"
int main() {
struct dataSet* trainingData = NULL;
trainingData = initialiseDataSetFromFile("sinwaves.csv"); // Returns dataSet* filled with values
double** x = getInputFromDataSet(trainingData);
std::cout << x[1] << std::endl; // <--- ERROR: read file access violation.
}
cgp.h:
struct dataSet;
double** getInputFromDataSet(struct dataSet*);
cgp.c:
#include "cgp.h"
struct dataSet {
int numSamples;
int numInputs;
int numOutputs;
double **inputData;
double **outputData;
};
double** getInputFromDataSet(struct dataSet* ds) {
return (ds->numInputs);
}
最好我希望能够在我的 main.cpp 文件中简单地执行 trainingData->numInputs,但我不确定这是否可能。
完全错误(在 main.cpp 中注释的行):抛出异常:读取访问冲突。x 为 0x1。
提前致谢。
解决方案
我希望能够在我的 main.cpp 文件中简单地执行 trainingData->numInputs,但我不确定这是否可能。
该库的设计方式是隐藏 的定义dataSet
,从而防止访问numInputs
其他成员。
从技术上讲,您可以访问该成员,只需定义与 cgp.c 中定义的相同的类。定义必须完全匹配。否则程序将违反一个定义规则,并且格式错误(不需要诊断)。因此,如果以后修改库,这很容易中断。我建议避免这种情况。
推荐阅读
- android - 参数不在其范围内应该扩展
- react-native - 如何知道 ScrollView 内容是可滚动的还是不响应原生的?
- echarts - 如何使用 ECharts 操作关系图中的节点?
- c# - 我们称之为代码块
- javascript - 如何过滤掉复杂查询中的文本字段?
- javascript - 如何基于在我的 .ts 文件中的数组中搜索值数组来禁用和选中复选框
- c++ - 类的 C++ 友元函数无法访问封装的类
- php - HTML 电子邮件不适用于表格格式
- windows - 在 Windows 上使用 Linux 运行 Electron
- sql - 将列从一个表复制到另一个表,但它会挂起 DB Browser for SQLite