【发布时间】: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.cpp和MyClass.cpp。当您使用两个源文件构建时,您会收到错误,因为只允许定义(实现)函数之类的东西一次.