gpt4 book ai didi

c++ - 记忆一下从 C++ 到 C 的结构

转载 作者:行者123 更新时间:2023-11-30 19:05:21 24 4
gpt4 key购买 nike

我正在尝试读取我在 c++ 中编写的程序的结构进入c程序。我创建了一个.hstructextern C为函数。然后我编写了 C++ 程序,该程序读取 csv file并将一些元素保存在 struct 中。现在我必须记忆起struct在 C 程序中读取值,但我遇到了很多问题。我不知道我是否在 .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);

并定义我的 vector 并调用该函数。我得到了error :

reference not define to 'get_buses'.

你能帮我吗?谢谢

最佳答案

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

g++ -c lettura.cpp for the cpp file. For the c file i use 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,但我认为这超出了本问题/答案的范围。

关于c++ - 记忆一下从 C++ 到 C 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50024452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com