首页 > 解决方案 > 在 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。

提前致谢。

标签: c++c

解决方案


我希望能够在我的 main.cpp 文件中简单地执行 trainingData->numInputs,但我不确定这是否可能。

该库的设计方式是隐藏 的定义dataSet,从而防止访问numInputs其他成员。

从技术上讲,您可以访问该成员,只需定义与 cgp.c 中定义的相同的类。定义必须完全匹配。否则程序将违反一个定义规则,并且格式错误(不需要诊断)。因此,如果以后修改库,这很容易中断。我建议避免这种情况。


推荐阅读