0

当我创建一个新项目时,Visual Studio 2012 创建了三个我感兴趣的文件:Stdafx.h、MyProj.h 和 MyProj.cpp。在 MyProj.h 中,Visual Studio 创建了一个“ref 类”,但我无法让项目与那里的 ref 类一起编译。我将 ref 类移动到 MyProj.cpp 文件中,现在项目可以正常编译。为什么“ref 类”会在 .h 文件中而不是 .cpp 文件中?

4

2 回答 2

1

您必须了解 C++ 代码的编译和链接方式。它与您习惯使用的语言 Java 和 C# 非常不同。C++ 没有将代码分解为模块的标准方法。每个源代码文件都单独编译并生成一个目标文件。然后它们被链接器粘合在一起以制作程序。

因此,如果您有两个使用您的类的源代码文件,那么他们需要知道该类的外观。您可以通过将类的声明放在.h 文件中来做到这一点。然后,样板文件将类成员的实现放在 .cpp 文件中。

这是项目模板为您提供的,.h 文件中的 ref 类,可供您添加成员声明。还有一个空的 .cpp 文件,准备好将成员定义放入其中。

这实际上在 C++/CLI 中不再那么必要了,因为它是一种实际上确实有模块的语言。你从 C# 中知道它们,称为程序集。如果用不同语言编写的其他代码需要知道类的外观,则添加对程序集的引用。编译器从程序集中的元数据中读取类声明,不需要 .h 文件。但是,如果您有两个链接到一个程序集中的 .cpp 文件,您仍然需要一个 .h 文件。

一般来说,你会想要一本关于 C++ 编程的介绍性书籍。您需要了解一些基础知识才能有效使用 C++/CLI。这样的书肯定会讨论头文件并展示如何拆分声明和实现。

于 2013-07-26T20:06:18.583 回答
0

这与普通 C++ 中类型定义进入头文件的原因相同:帮助您在所有源文件之间保持定义一致。

头文件基本上是自动复制+粘贴,保证您不会忘记更改其中一个副本。

(如果不同的文件开始对同一类型使用不同的定义,则违反了单一定义规则,并且该语言对可能开始发生的坏事没有任何限制。)

于 2013-07-26T19:28:59.530 回答