在c ++

时间:2019-07-16 08:56:17

标签: c++ c struct

我需要访问在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 ++)。我已经尝试了很多不同的想法,但是到目前为止还没有任何结果。有人可以告诉我如何实现这一点吗?

编辑:

c ++文件如下atm:

#include <iostream>

extern "C"{
    #include "struct.h"
}

int main(){

  while(true){

    std::cout << structName.x << "\n";

  }
}

1 个答案:

答案 0 :(得分:1)

我看不到您遇到的真正问题。但是为了使示例工作正常进行,我做了以下更改。

在A.c中:

#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