通过 main() 重用文件中的类

发布于 2024-12-11 07:57:36 字数 627 浏览 0 评论 0原文

如何重用已具有 main 方法的文件中的类?例如,我想使用另一个开发人员在我自己的程序 main.cpp 中的 foo.cpp 中编写的 struct foo:

//-- foo.cpp --
struct foo {
  int bar;
};
int main() {
  return 0;
}
//-- end foo.cpp --

//-- main.cpp --
#include "foo.cpp"
int main() {
  foo f;
  f.bar = 1;
  return f.bar;
}
//-- end main.cpp

main.cpp 将无法使用 g++ 4.4.4 进行编译,并给出错误:

main.cpp: In function "int main()":
main.cpp:2: error: redefinition of "int main()"
foo.cpp:4: error: "int main()" previously defined here

我无法从 foo 中提取 main 方法。 cpp 因为我不控制该代码。在我正在处理的实际代码库中,struct foo 更复杂,因此我无法将其复制到 main.cpp 中,因为它将无法维护。

How can I reuse a class that is in a file that already has a main method? E.g. I would like to use struct foo that another developer wrote in foo.cpp in my own program, main.cpp:

//-- foo.cpp --
struct foo {
  int bar;
};
int main() {
  return 0;
}
//-- end foo.cpp --

//-- main.cpp --
#include "foo.cpp"
int main() {
  foo f;
  f.bar = 1;
  return f.bar;
}
//-- end main.cpp

main.cpp will not compile using g++ 4.4.4, giving the errors:

main.cpp: In function "int main()":
main.cpp:2: error: redefinition of "int main()"
foo.cpp:4: error: "int main()" previously defined here

I cannot extract the main method from foo.cpp because I do not control that code. In the actual codebase I am dealing with, struct foo is more complicated so I cannot copy it into main.cpp, since it would be unmaintainable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

喵星人汪星人 2024-12-18 07:57:36

在编译 foo.cpp 时,使用预处理器定义将 main 变成一个扩展为 not_main 的宏; IE,

g++ -Dmain=not_main foo.cpp

Use a preprocessor define to make main into a macro that expands to, for example, not_main, while you're compiling foo.cpp; i.e.,

g++ -Dmain=not_main foo.cpp
冷清清 2024-12-18 07:57:36

非编码解决方案:与维护相关代码的人员交谈。提议为他们重构它!

Non-coding solution: go talk to the people who maintain the code in question. Offer to refactor it for them!

┈┾☆殇 2024-12-18 07:57:36

将 struct foo 放在 header

foo.h
#ifndef _STRUCT_FOO
#define _STRUCT_FOO
struct foo {
  int bar;
};
#endif

include 中,无论您需要什么地方。

place the struct foo inside a header

foo.h
#ifndef _STRUCT_FOO
#define _STRUCT_FOO
struct foo {
  int bar;
};
#endif

include that wherever you need it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文