【问题标题】:Error: Multiple definitions of function in C++ class错误:C++ 类中函数的多个定义
【发布时间】:2022-09-29 18:46:13
【问题描述】:

我不知道如何在它的范围之外添加一个类的函数,在另一个类中使用它们然后编译它。

我的主程序

#include\"MyClass.cpp\"
int main(){
  MyClass myClass;
  myClass.run();
}

我的类.cpp

#ifndef MYCLASS_CPP
#define MYCLASS_CPP
#include<iostream>

class MyClass {
  private:
    void usage();
  public:
    void run();
};

void MyClass::usage(){
  std::cout << \"usage called\" << std::endl;
}

void MyClass::run(){
  usage();
}
#endif

我尝试编译它:

g++ MyMain.cpp MyClass.cpp -o main

这样,我收到以下错误消息:

/usr/bin/ld: /tmp/ccN7GfOD.o: in function `MyClass::usage()\':
MyClass.cpp:(.text+0x0): multiple definition of `MyClass::usage()\'; /tmp/ccLhxS6v.o:MyMain.cpp:(.text+0x0): first defined here
/usr/bin/ld: /tmp/ccN7GfOD.o: in function `MyClass::run()\':
MyClass.cpp:(.text+0x38): multiple definition of `MyClass::run()\'; /tmp/ccLhxS6v.o:MyMain.cpp:(.text+0x38): first defined here
collect2: error: ld returned 1 exit status

如果我正确理解了这个概念,那么类中的函数头仅用作占位符。然后,实际功能会被外部函数“覆盖”,这些函数也包含一个主体。 为什么错误消息说该函数已在 MyMain.cpp 中定义?

我也看到这里有很多类似的问题,但不幸的是我无法扩展我对基本问题的理解来解决它。 是否有可能我使用该命令错误地使用 C++ 构建类,或者我可以保存#include \"MyClass.cpp\"

亲切的问候

  • 首先将源文件拆分为实际的标题仅包含类本身的文件(例如MyClass.h),然后是定义(实现)类功能的源文件。
  • 现在发生的是类及其函数在两个都MyMain.cppMyClass.cpp。当您使用两个源文件构建时,您会收到错误,因为只允许定义(实现)函数之类的东西一次.

标签: c++ class linker g++


【解决方案1】:

有几处不对。这是正确的步骤

  1. 将 MyClass.cpp 重命名为 MyClass.h。

  2. 创建一个新文件 MyClass.cpp

  3. 将函数定义 MyClass::uage() { .. }MyClass::run() { .. } 移动到 MyClass.cpp

  4. #include "MyClass.h" 添加到 MyClass.cpp

  5. 在 MyMain.cpp 中将 #include "MyClass.cpp" 更改为 #include "MyClass.h"

    然后像现在这样构建。那部分是正确的。

【讨论】:

    猜你喜欢
    • 2015-04-10
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    相关资源
    最近更新 更多