回想一个从C 到C的结构

Recall a struct from C++ to C

本文关键字:结构 一个 回想      更新时间:2023-10-16

我正在尝试将c++中编写的程序的结构读取到c程序中。我用structextern C创建了一个.h。然后,我编写了读取csv file并将某些元素保存在struct中的C 程序。现在,我必须在C程序中回顾struct并阅读值,但是我遇到了很多问题。我不知道我在.cpp file.h file还是在C程序中犯了一些错误。我正在Linux下工作。

我的.h file是:

typedef struct Buses{
 int maggiore;
 int minore;
}BusesStruct;
#ifdef __cplusplus
extern "C" {
#endif
    void get_buses(BusesStruct *);
#ifdef __cplusplus
}
#endif

我的CPP是

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include "lettura.h"
using namespace std;
void get_buses(BusesStruct * bus_scelti){
//leggo il file csv
    string line,nomefile;
    ifstream myfile;
    cout << "Quale file si vuole aprire? " << endl;
    cin >> nomefile;
    myfile.open(nomefile.c_str());
    int j=0;
    if (myfile.is_open()) {
        int primobus;
        int secondobus;
        cout << "Digitare il numero di uno dei due BUS sul quale si vuole eseguire l'operazione (1-9): " << endl;
        cin >> primobus;
        cout << "Digitare il numero di un secondo BUS sul quale si vuole eseguire l'operazione (1-9): " << endl;
        cin >> secondobus;
        int bus1_scelto;
        int bus2_scelto;
        while (getline(myfile,line)) {
            istringstream myline(line);
            string bus[10];
            for (int i=0; i<9; i++){
                    getline(myline,bus[i+1],';');
                }
            for (int i=0; i<10; i++){
                if(i == primobus){
                    int bus1_scelto_c = atoi(bus[i].c_str());
                    bus1_scelto=bus1_scelto_c;
                }
                if(i == secondobus){
                    int bus2_scelto_c = atoi(bus[i].c_str());
                    bus2_scelto=bus2_scelto_c;
                }
            }
            bus_scelti[j].maggiore=max(bus1_scelto,bus2_scelto);
            bus_scelti[j].minore=min(bus1_scelto,bus2_scelto);
            j=j+1;          
        }   
    }
}

在我的C文件中,我写了#include lettura.h以回忆起:

BusesStruct bus_scelti[10005];
get_buses(bus_scelti);

并定义我的向量并回忆起功能。我得到了error

参考未定义为" get_buses"。

你能帮我吗?谢谢

根据您的评论,这是您的编译方式:

g++ -c lettura.cpp用于CPP文件。对于C文件,我使用g++ complete.c -o complete

这将C 文件编译到对象文件中,然后将C文件编译到可执行文件中。您还需要在对象文件中链接。

一些选项:

g++ -c lettura.cpp                   # compile C++ file to lettura.o
gcc -c complete.c                    # compile C file to complete.o
g++ lettura.o complete.o -o complete # link object files into executable 'complete'
g++ lettura.cpp complete.c -o complete # compile and link in one step

请注意,我正在使用gcc编译C代码和g++来编译C 代码并链接。

理想情况下,您应该为此使用makefile,但我认为这超出了这个问题/答案的范围。