gpt4 book ai didi

c++ - c++ 中的多重定义错误和解决此问题的解决方案

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:18 26 4
gpt4 key购买 nike

我是 C++ 新手。我对 C++ 中的多重定义错误有一些疑问。

假设我在一个程序中有 3 个文件。一个头文件和 2 个 .cpp 文件。我已将头文件包含在两个 .cpp 文件中。

  1. 我已经在头文件中声明了一个类,并以完全相同的方式在每个 .cpp 文件中定义了该类。那么这种实现方式会不会导致多重定义错误呢?如果是这样,是不是因为它有两份类定义,而编译器不知道在链接两个 .o 文件时使用哪一份?

我们可以通过在头文件中使用 extern 并只在其中一个文件中定义类来解决这个问题吗?如果我们可以使用这种方法解决问题,我们是否必须包含 . cpp(带有类定义)到其他 .cpp 文件(没有类定义)?

  1. 我已经在头文件中声明并定义了一个类。这个case和上面(1中提到的)一样吗?

  2. 我在头文件中声明了一个类,并在每个 .cpp 文件中定义了该类,但定义(函数体)不同。那么这种实现方式会不会导致多重定义错误呢?如果是这样,我们如何解决.cpp 文件中函数体不同的问题?

最佳答案

1) 您可以通过仅在一个 cpp 文件中“定义类”来解决此问题。为什么要在两个文件中定义它?

2) 不要在头文件中定义东西,只声明它们。此规则也有异常(exception),例如内联函数。类本身也可以定义多次(我的意思是声明类的方法和数据成员,(即编写 class XYZ { ... };)但每个定义必须相同。实现此目的的最简单方法是在头文件中定义一次类。然后,在多个位置包含该头文件的每个定义都必须相同。

3) 这个更愚蠢,定义某物两次是一回事,但每次都定义两次并以不同的方式定义它就更没有意义了。

我想问题在于为什么您认为有时可能需要多次定义事物。不要那样做。

您还应该明确“定义类”的含义。我认为这意味着定义类的方法和静态成员。但是,如果您还有其他想法,那可能会造成混淆。像往常一样,避免这种术语混淆的最好方法是发布一些代码。

关于c++ - c++ 中的多重定义错误和解决此问题的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com