好的,所以我正在尝试从中级Delphi过渡到C++面向对象编程。我读过IvarHorton关于VisualC++2010的书。我可以毫无问题地完成简单的控制台应用程序。我得到了语言本身(有点)。我苦苦挣扎的地方是标题和类(class)。我也了解头文件和类的一般作用。我没有得到的是什么时候使用标题或类的实现?我需要为我所做的一切创建类吗?我的实际工作函数需要在头文件中还是在CPP文件中?我迷失了如何正确使用它们,可以使用来自更有经验的程序员的一些现实世界指导。如果有帮助,我正在尝试使用MFC过渡到Windows应用程序。 最佳答案 I
例子:假设我在我的预编译头文件中包含:#include由于vector的一些实例,例如std::vector、std::vector等在我的项目中经常使用,如果我像这样在预编译头文件中实例化它们是否会减少编译时间:#includetemplateclassstd::vector;templateclassstd::vector;更进一步,将虚拟函数添加到使用一些函数的预编译头是否有意义:namespacepch_detail{inlineautofunc(){auto&&v=std::vector{};v.size();v.begin();v.front();}}我非常不确定翻译单元和
是否只是为了测试编译一个简单的程序,其中包含该头文件#included?为了更好地理解编译过程,我正在编写自己的“配置”,它会测试一些头文件和库文件是否存在。 最佳答案 是的,使用编译器来编译你的简单测试程序。这是查看编译器是否可以找到header的最好和最简单的方法。如果您对#include搜索路径进行硬编码,您将始终需要针对不同的编译器进行修改和调整。 关于c++-以编程方式检查头文件是否存在的最佳方法?,我们在StackOverflow上找到一个类似的问题:
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:InlinefunctionsinC++如果我在它的头文件中完全实现了一个类,编译器会做什么?一个典型的例子如下:classMyException{public:explicitMyException(constchar*file,intline)file(file),line(line){};constchar*getFile()const{returnfile};intgetLine()const{returnline};private:constchar*constfile;constintline;}
如果我在Linux中用C++创建静态库以生成“.a”文件,我(或其他任何人)如何使用该库?例如,我的库定义了一个类。我认为仅仅提供“.a”文件是不够的,还要提供头文件。我如何知道“.a”文件必须提供哪些头文件?例如,我是否需要提供包含在我的库代码中任何位置的所有头文件? 最佳答案 头文件为类和函数提供“声明”。编译器需要这些,因此它可以a)验证您是否传递了正确的参数,和/或设置类/结构的正确数据成员,以及b)因此它可以知道如何调用这些函数。voiddo_something(inta,std::string&s);告诉编译器这个函数需
我正在构建一个VC++解决方案并使用Win&SDK和Win8SDK(包括LIB中的这些路径和VS2008的INCLUDE设置)。但是我在refclock.h头文件中收到以下构建错误。我不明白我们如何在标准的MSFT头文件中得到错误。谁能帮我解决这个问题?c:\programfiles\microsoftsdks\windows\v7.0\samples\multimedia\directshow\baseclasses\refclock.h(80):errorC2061:syntaxerror:identifier'CAMSchedule'2>c:\programfiles\micro
对于我的项目,我使用了一些非常复杂的数据结构,例如std::unordered_map>>为了可读性,我想为其声明类型别名。我构建项目的代码已经通过在头文件中全局放置using语句来做到这一点://bar.h#ifndefBAR_H#defineBAR_H#include#include#include#include"foo.h"usingFooTable=std::unordered_map>>;classBar{FooTablecreate_foo();};#endif因为我的C++知识有点生疏,所以我只是采用了这种风格——但现在我读到以这种方式使用using可能会有问题,因为它
我正在研究COM,所以有一些基本的问题让我困惑...我知道IDL文件用于描述方法定义(或软件模块之间所谓的“契约”),而.H头文件包含类似方法原型(prototype)的内容,看起来与IDL的含义相似为了。那么,为什么这两个东西并存呢?一个还不够吗?非常感谢。 最佳答案 接口(interface)描述语言(IDL)本身是一种小型语言,它提供了一种独立于编程语言的方式来描述接口(interface)。工具从您的.idl生成.h文件。如果您只有一个.h文件,则不可能将其与另一种编程语言联系起来。.h文件仅针对C和C++代码。其他一些区别
总结:今天我发现在构建一个没有预编译头文件的DLL时,当您尝试使用它时会出现一个奇怪的错误。当禁用预编译header时,构建DLL会很顺利。但是,一旦附加了DLL(编译时或运行时),它就会导致错误“参数无效”。两种情况的实际错误代码都不同。附加编译时时会弹出错误代码为0xc000000d的对话框,调用LoadLibrary()时会返回NULL指针,而GetLastError()会返回0x57.编辑:我发现当增量链接被禁用时问题就消失了。在运行附加到DLL编译时的客户端时,我以某种方式错过了VisualStudio显示的以下错误:'TestClient.exe':Loaded'D:\Pr
我想知道函数在头文件中的声明顺序是否重要。让我们想象一下:我有两个项目使用相同的header定义,并且由于一些不明确的原因必须复制header。并且这些头文件在声明函数顺序方面是不一样的。所以我的第一个项目的标题是:classA{someFunctionA();someFunctionB();}和第二个项目中的header:classA{someFunctionB();someFunctionA();}现在如果我在第二个项目中使用第一个项目中创建的实现(比如动态库或其他)会发生什么?我知道我应该为两个项目使用相同的header定义,我只是想知道编译器是否会为函数使用某种堆栈或重新排序它