【问题标题】:How do I get a function/class definition from a .cpp by including its corresponding .h file?如何通过包含相应的 .h 文件从 .cpp 获取函数/类定义?
【发布时间】:2015-12-28 19:35:53
【问题描述】:

例如,在 A.h 中:

class A{
   void method();
};

在 A.cpp 中:

#include "A.h"

void A::method(){/*do stuff*/};

在 main.cpp 中

#include "A.h"

int main(){
   A a;

   a.method();
}

如何通过在我的 main.cpp 文件中仅包含 A.h 从 A.cpp 访问方法的定义?是否有涉及 makefile 或 IDE 的技巧?

【问题讨论】:

  • 您要求的是代码编辑器可以实现的东西,因此请查看您用于编写代码的代码编辑器的功能。
  • 我正在使用 Xcode。我不知道这种功能叫什么所以我不知道要查找什么。
  • 您的示例在什么时候需要“定义方法”?
  • 您需要将“方法”的声明(在 .h 文件中)设为公共成员方法,因为默认情况下 C++ 成员方法是私有的。
  • 您到底想达到什么目的?你收到错误消息了吗?

标签: c++ function class header


【解决方案1】:

是否有涉及 makefile 或 IDE 的技巧?

这个“技巧”称为链接 - 将所有已编译的模块和库一起加载到可执行文件中。在您的情况下,您可以手动执行此操作:

g++ -c a.cpp -o a.o  // compiling a.cpp and producing object file a.o
g++ -c main.cpp -o main.o // compiling main.cpp and producing object file main.o
g++ main.o a.o -o myprog // linking all object files together with system libraries and producing executable myprog

对于不同的编译器,命令可能看起来不同,但过程是相同的。当然,您不想一次又一次地输入所有这些内容,因此您希望将其自动化。 IDE 或 makefile 为您所做的,不涉及任何技巧或魔法。

【讨论】:

  • @user3063750 在IDE(包括Xcode)中通常你有一个项目——项目中包含的每个.cpp文件都被编译并链接在一起。
  • 那么这是否意味着我的示例应该可以工作?我仍然收到“架构 x86_64 的未定义符号”错误。
  • @user3063750 我的心灵感应机器昨天坏了,我在等它修好。对不起。
  • 我在问题中的例子。如果你有滚轮机,你可能可以直接在北边找到它。
【解决方案2】:

我通过在项目中添加一个新的 .cpp 文件来解决这个问题,该文件由 Xcode 自动链接到相应的 .hpp 文件。

【讨论】:

    猜你喜欢
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多