回想一个从C 到C的结构
Recall a struct from C++ to C
我正在尝试将c++
中编写的程序的结构读取到c
程序中。我用struct
和extern 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,但我认为这超出了这个问题/答案的范围。
相关文章:
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 静态结构和一个定义规则
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- 在学习数据结构之前对STL有一个了解是好的吗?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 使用完数据结构后清空数据结构是一个好习惯吗?
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何将数据从一个结构链接到另一个结构
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- error dllimport 函数的定义不允许在一个特定的联合中,而其他类、结构和联合将按预期导出
- std::transform 将一个结构数组复制到另一个结构数组
- C++:如何做一个链表,结构作为参数传递?
- 输入 ctrl + x 后如何再次 cin (cin<<x) 循环(cin 一个结构)
- 两个附带的类层次结构-一个好的设计模式