【问题标题】:Class implementation in multiple files多个文件中的类实现
【发布时间】:2011-10-19 20:57:27
【问题描述】:

我正在尝试在不同的 cpp 文件中实现一个类。我知道如果成员函数是独立的,那么在 C++ 中这样做是合法的。然而,其中一个成员函数使用另一个成员函数,例如在这种情况下:

在function1.cpp中

#include "myclass.h"
void myclass::function1()
{ 
    function2();
}

在function2.cpp中

#include "myclass.h"
void myclass::function2()
{
....
}

我会得到一个未定义的对 function2 的引用的错误。添加这个指针也不起作用。我需要在function1.cpp中以某种方式声明它吗?谢谢~

头文件包含两个函数的声明。它在函数 1 和函数 2 在同一个文件中时有效,但在我将它们分开时无效。我也相信我已经在项目中添加了两个 cpp。顺便说一句,我正在使用 Qt 创建器。

【问题讨论】:

  • 你在 myclass.h 中声明了 function1() 和 function2() 吗?
  • 你需要在头文件(myclass.h)中有两个函数的函数声明。
  • 你能添加你的 myclass.h 文件吗?类声明可能有一些错误 - 因为这些情况是可以的,错误不能在这里
  • 您确定这两个 .cpp 文件都包含在您的编译中吗?
  • 你的方法没有问题。实际的编译器错误是什么?

标签: c++


【解决方案1】:

只要myclass.h 包含类的定义和成员函数的声明,就可以了。示例:

//MyClass.h
#ifndef XXXXXXXX
#define XXXXXXXX
class MyClass
{
  public:
   void f1();
   void f2();
};
#endif

//MyClass1.cpp
#include "MyClass.h"
void MyClass::f1()
{
};

//MyClass2.cpp
#include "MyClass.h"
void MyClass::f2()
{
     f1(); //OK
}

【讨论】:

  • 嗨,谢谢。我相信这就是我所做的。虽然仍然不会编译。当两个函数在同一个文件中时,它可以正常工作。我正在使用 Qt,这两个文件都列在项目中。
  • 这不起作用。
【解决方案2】:

这应该可行。如果您遇到链接器错误,请确保您编译了两个 cpp 文件,这很可能是导致您的错误的原因。

【讨论】:

    【解决方案3】:

    对我来说一切都很好。您的构建过程可能有问题。您应该将这两个 .cpp 文件(使用 -c 选项)编译成目标文件,并在下一阶段将它们链接在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多