Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cpp在类中定义 我开始了几年前的C++编程,我有一个关于在一个单独的文件中定义一个类的文件的问题。这是我的密码 main.cpp 数学 #包括 #包括“数学h” 整数数学::求和(整数a,整数b) { 返回a+b; }_C++ - Fatal编程技术网

Cpp在类中定义 我开始了几年前的C++编程,我有一个关于在一个单独的文件中定义一个类的文件的问题。这是我的密码 main.cpp 数学 #包括 #包括“数学h” 整数数学::求和(整数a,整数b) { 返回a+b; }

Cpp在类中定义 我开始了几年前的C++编程,我有一个关于在一个单独的文件中定义一个类的文件的问题。这是我的密码 main.cpp 数学 #包括 #包括“数学h” 整数数学::求和(整数a,整数b) { 返回a+b; },c++,C++,为什么你不能定义与你的类名相同的名字。例如,在我的脚本数学? 您定义的被称为宏,预处理器用一些东西替换宏 例如,您将宏mathematics定义为不替换,这就是预处理器将要做的。定义类数学{…}将替换为类{…}。这是无效的 由于预处理器宏不存在于任何特定的命名空间中(它们确实与实际的C++分析器分开处理),它们是全局的。为了避免符号名称之间的冲突,宏通常使用大写字母拼写。在您的情况下,您应该使用数学。宏让编译器用定义的值替换文本。例如,如果您有以下宏: #定义数学 它将用零替换所有“数学”事件,

为什么你不能定义与你的类名相同的名字。例如,在我的脚本数学? 您定义的被称为宏,预处理器用一些东西替换宏

例如,您将宏
mathematics
定义为不替换,这就是预处理器将要做的。定义
类数学{…}
将替换为
类{…}
。这是无效的


由于预处理器宏不存在于任何特定的命名空间中(它们确实与实际的C++分析器分开处理),它们是全局的。为了避免符号名称之间的冲突,宏通常使用大写字母拼写。在您的情况下,您应该使用

数学

宏让编译器用定义的值替换文本。例如,如果您有以下宏:

#定义数学

它将用零替换所有“数学”事件,因为您没有定义值来替换它。将其定义为:

#定义数学1

将所有出现的“Math”替换为值1

至于必须包含基类:编译器必须知道在哪里可以找到基类。如果不包括包含基类的标头,则派生类的标头无法知道从何处获取基类,因此它将给出一个
未定义的引用…
错误

您还应该将include-guard置于任何其他代码之上。所以不是这样的:

#include "Enemy.h"
#ifndef Ninja_H
#define Ninja_H
//...
#endif
#ifndef Ninja_H
#define Ninja_H
#include "Enemy.h"
//...
#endif
但就像这样:

#include "Enemy.h"
#ifndef Ninja_H
#define Ninja_H
//...
#endif
#ifndef Ninja_H
#define Ninja_H
#include "Enemy.h"
//...
#endif

include守卫基本上是告诉编译器已经解析了该文件。如果将代码放在防护装置之外,则可能会导致错误。放置这样的include将禁用某些优化,从而导致更长的编译时间。简单地说:这样做没有好处。

除了你的问题之外,你真的应该花一些时间处理一些问题,因为你的代码中有一些非常严重的误解。
#define
(s)是在编译器正常运行之前由预处理器进行的文本替换(宏)。您已经定义了宏
mathematics
,将
mathematics
的任何实例替换为空,因此现在类行变得毫无意义<代码>类数学在预处理器运行后变为
。此外,对于某些编译器,您可以用
#pragma一次性替换include-guard。预处理器在编译器之前运行,因此它会扩展macors:用实际值替换任何名称。因此,在您的程序中:
#定义x7intx=0处理器将使其:
int 7=0
。这将产生编译时错误。很抱歉,代码不正确。我写得很快,现在我改进了。谢谢你的帮助!现在这个问题没有多大意义:)@L.python请不要编辑您的问题以包含答案,因为它不再有任何意义,而且答案似乎是错误的或不是很好。
#ifndef Ninja_H
#define Ninja_H
#include "Enemy.h"
//...
#endif