在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.
C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?
设置包含警卫的常规方法是什么?我通常把它们写成(例如h.h):
#ifndef _EXAMPLE_H_
#define _EXAMPLE_H_
#include "example.h"
#endif
Run Code Online (Sandbox Code Playgroud)
强调约定是否重要?当我用Google搜索时,我看到了相互矛盾的信息.是否_EXAMPLE_H_甚至有相匹配的头的名称?
我认为我可以学习和改进编程的最好方法之一就是查看各种源代码。我正在查看 Blender 的源代码并注意到有关头文件的一些信息。它们中的大多数#ifndef包括守卫,其中宏被双下划线包围(例如__BMESH_CLASS_H__)。
这让我想到,整个“只是不作出任何以下划线开始在所有”的建议是对于初学者好,但我认为,为了在编程创造我自己的保留标识符时,我应该学习取得进一步进展是和不合适。
我将#ifndef ..#define ..#endif添加到我项目的文件中,编译器失败了.一旦我删除它或在定义中添加任何其他名称它编译好.可能是什么问题呢?
听起来像文件已经声明,但我不知道在哪里.我很好,只是删除它,但我真的想知道为什么会发生这种情况.
error: expected class-name before ‘{’ token
error: ‘QDesignerFormEditorInterface’ has not been declared
Run Code Online (Sandbox Code Playgroud)
还有其他一些错误.
我实际上是在使用Qt的一个例子,"Custom Widget Plugin Example".
不同之处在于我使用自己的类作为自定义小部件(.h,.cpp和.ui文件).
它可能与包含2的文件有关,尽管这就是示例的实现方式.
我开始用C++编写一个简单的解释器,我将在下面描述一个类结构,但是我放弃并重写了Java中的东西,因为标题让我很难过.这是C++中显然不允许的基本结构:
main.cpp包含main函数,并包含一个我们可以调用printer.h的类的头文件(其single void方法在printer.cpp中实现).现在想象另外两个相同的类.两个人都想打电话Printer::write_something();,所以我在每个都包含了printer.h.所以这是我的第一个问题:为什么我可以#include <iostream>一百万次,甚至一个接一个,但我只能包括我的标题一次?(好吧,我想我可能会对我做同样的事情,只要它在同一个文件中.但我可能是错的.)我理解声明和实现/定义之间的区别,但是代码给了我一个类重新定义错误.我不明白为什么.这就是让我大吃一惊的事情(可能会告诉你为什么我不理解这一点):我不能只在main.cpp的顶部包含printer.h并使用我的其他两个类中的类.我知道我可以在两个类(标题)中的一个中包含printer.h而没有任何问题,但我不明白为什么这与在main.cpp中包含类之前包含它有什么不同(这样做会给出我找不到错误的课程).
当我厌倦了,我想到移动到C,因为我正在使用的OOP是非常强制的,但我会遇到同样的问题,除非我在一个文件中写入所有内容.知道C++但由于编译问题而无法正确使用它是令人沮丧的.
如果你能为我清楚这一点,我将非常感激.谢谢!