我试图将c++
中编写的程序结构读入c
程序。我为该函数创建了.h
struct
和extern C
。然后我编写了一个读取csv file
的C ++程序,并在struct
中保存了一些元素。现在我必须回忆一下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
:
你能帮帮我吗?感谢引用未定义为&#39; get_buses&#39;。
答案 0 :(得分:1)
根据您的评论,这是您编译的方式:
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,但我认为这超出了这个问题/答案的范围。