c++ - 如何提前终止另一个文件中定义的函数?

标签 c++

我有一个文件,我试图在其中重载一些运算符,它应该在给定某些条件的情况下提前终止。此文件与主文件分开

#include "MY.h"
// this file is MY.cpp
// MY is a class

int& MY::operator[](int i) {
    if (/* condition is met */) exit(1);
    else {/* proceed... */}
}

如果我编译它,它会给我这个错误

c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status

但是假设我有一个 main() 里面什么都没有,就像这样:

// same stuff as above code

int main() {}

具有空 main() 函数的新代码将编译而不会出现任何问题。

现在,我有另一个文件,我想使用的实际 main() 就在这个文件中:

#include "MY.cpp"

int main() { /* some code... */}

如果我编译这个文件,它会给我这个错误:

error: redefinition of 'int main()'

解决这个问题的明显方法是去掉 MY.cpp 中的 main(),但这样做会给我第一个关于返回 1 退出的错误状态(甚至不知道那是什么意思)。

**所以底线是这样的:如果函数在我包含在我的主文件中的另一个文件中定义,我该如何终止该函数? **

最佳答案

#include "MY.cpp"

立即红旗。您应该只使用 #include 头文件,而不是 cpp 文件。 #include 指令在其位置插入指定的整个文件的拷贝。这意味着如果您的项目中有多个源文件 #include 同一个 cpp 文件,则该文件中定义的任何内容都将被定义多次,并且将违反 One Definition Rule .

在项目中使用多个源文件的方法是将它们的头文件包含在任何需要它们的源或头文件中,并将所有 cpp 文件添加到 IDE 中的项目并让它管理它们的编译,或者如果您从命令行运行 GCC,然后将它们全部指定为命令行参数。例如

gcc main.cpp MY.cpp -o MY.exe

至于您收到的错误,这表明您的任何源文件中都没有定义 main 函数,如果您尝试编译 MY.cpp 到一个完整的可执行文件,而不是一个目标文件,或者用一个单独的 cpp 文件编译它,该文件定义了一个主要功能。

这听起来像是一个 Windows 问题,因此也可能是您定义了 main 而它需要 WinMain 。请参阅此问题以获得帮助:Replacing WinMain() with main() function in Win32 programs

关于c++ - 如何提前终止另一个文件中定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44559670/

相关文章:

C++ - 交叉谱密度中的复值计算错误

c++ - 对象创建差异

c++ - 在 Unix 终端中打开程序时,有没有办法让程序名称和它的输入在同一行?

c++ - 从 UNIX 时间戳获取同月第一天的时间戳,无需转换为本地时间

c++ - 如果范围未排序,inplace_merge 会做什么?

C++/二维 vector 的大小

c++ - 在 Ubuntu 18.04 上,我编译的 cpp 可执行文件找不到 VTK7 依赖项

c++ - 如何在 HLSL DirectX11 C++ 中使用 Texture2DArray

c++ - 查找最大对数的有效算法

c++ - 抽象基类和层次结构 - C++