Visual studio C++/CLI项目

Visual studio C++/CLI项目,visual-studio,c++-cli,Visual Studio,C++ Cli,当我创建一个新项目时,VisualStudio2012创建了我感兴趣的三个文件:Stdafx.h、MyProj.h和MyProj.cpp。在MyProj.h中,VisualStudio创建了一个“ref类”,但我始终无法使用ref类编译项目。我将ref类移动到MyProj.cpp文件中,项目现在编译良好。为什么.h文件中会有一个“ref类”而不是.cpp文件?这与在普通C++中类型定义进入头文件的原因是一样的:帮助您在所有源文件之间保持定义一致 头文件基本上是自动复制+粘贴的,这保证了您不会忘记

当我创建一个新项目时,VisualStudio2012创建了我感兴趣的三个文件:Stdafx.h、MyProj.h和MyProj.cpp。在MyProj.h中,VisualStudio创建了一个“ref类”,但我始终无法使用ref类编译项目。我将ref类移动到MyProj.cpp文件中,项目现在编译良好。为什么.h文件中会有一个“ref类”而不是.cpp文件?

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

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


(如果不同的文件开始使用同一类型的不同定义,则违反了一个定义规则,语言对不可能发生的坏事没有限制)。< /P> < p>您必须理解编译和链接C++代码的方式。它与您所使用的语言Java和C#非常不同。C++没有标准的方法来将代码分解成模块。每个源代码文件都单独编译并生成一个目标文件。然后它们被链接器粘在一起,形成一个程序

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

这就是项目模板提供给您的.h文件中的一个ref类,可以向其中添加成员声明。和一个空的.cpp文件,供您将成员定义放入

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


一般来说,你会想学习一本关于C++编程的入门书。要有效地使用C++/CLI,您需要了解一些基础知识。这本书肯定会讨论头文件,并展示如何分割声明和实现。

谢谢,这是一个很好的解释。我以前用C语言编程,所以在某种程度上我了解对象文件和链接器。我觉得“class”这个关键词把我弄糊涂了。但问题是——如果“ref类”只是标题,那么为什么他们不在我的.cpp文件中放一个相同的“ref类”。仅仅因为您只声明了一次类。当存在多个编译单元时,不会发生任何好事,编译器会对您发牢骚。@Hans:.NET元数据不会对同一程序集中的其他编译单元起作用。你知道这一点,因为你在回答中也这么说了。那么,为什么你会对那些你知道是正确和有用的答案投反对票呢?