Мне нужно получить доступ к содержимому структуры, определенной в заголовке файла c в файле c++.
Заголовочный файл struct.h в настоящее время имеет следующий формат:
typedef struct {
int x;
int y;
} structTypeName;
extern structTypeName structName;
Структура используется и изменяется в файле A.c
#include "struct.h"
structTypeName structName;
int main(){
structName.x = xyz;
structName.y = zyx;
}
Теперь мне нужно получить доступ к структуре в файле C++ B.cpp (да, это должен быть C++). Я пробовал кучу разных идей, но пока ничего не получилось. Может кто-нибудь, пожалуйста, дайте мне представление, как это реализовать?
Обновлено:
Файл С++ выглядит следующим образом:
#include <iostream>
extern "C"{
#include "struct.h"
}
int main(){
while(true){
std::cout << structName.x << "\n";
}
}
Наверное, все, что вам нужно, это либо добавить extern "C" {...} в свой struct.h файл, либо, если вокруг вас это невозможно #include "struct.h"
Я уже включил struct.h через extern "C" {}. Я все еще не могу получить доступ к значениям переменных. В моем воображении для этого должно хватить чего-то вроде var = structName.x
@KBS Пожалуйста, добавьте пример кода C++, с которым вы пытаетесь получить доступ к структуре. Мне будет легче определить проблему при просмотре исходного кода.
Если вы смешиваете код C и C++, ваша функция main должна быть в коде C++.
@BoR Я добавил свой паршивый кусок кода, который использую для тестирования.
@IanAbbott это обязательно или приятно иметь? было бы чертовски много работы, чтобы перенести A.c в С++...
Ну, вы можете переименовать A.c main и вызвать его из C++ main.





Я не вижу реальной проблемы, с которой вы столкнулись. Но чтобы пример работал, я внес следующие изменения.
В переменного тока:
#include "struct.h"
structTypeName structName;
int c_main(void) { // new name since we can't have two "main" functions :-)
structName.x = 123; // settings some defined values
structName.y = 321;
}
И в B.cpp:
#include <iostream>
#include "struct.h" // this declares no functions so extern "C" not needed
extern "C" int
c_main(void); // renamed the C-main to c_main and extern declaring it here
int main() {
c_main(); // call renamed C-main to initialize structName.
// and here we go!
while (true) std::cout << structName.x << "\n";
}
И, наконец, скомпилируйте, скомпонуйте (с помощью компилятора C++) и запустите:
$ gcc -c A.c -o A.o
$ g++ -c B.cpp -o B.o
$ g++ A.o B.o -o a.out
$ ./a.out
Возможный дубликат Как использовать extern для обмена переменными между исходными файлами?