我在几个弱点之前就开始了C ++编程,我对在单独的文件中定义类的文件有疑问。这是我的代码。

main.cpp

#include <iostream>
#include "Maths.h"
int main() {
  Maths m;
  int s = m.sum(1,2);
  std::cout << s << std::endl;
  return 0;
}


数学

#ifndef Maths_H
#define Maths_H

class Maths
{
  public:
    int sum(int a, int b);
};

#endif


Maths.cpp

#include <iostream>
#include "Maths.h"
int Maths::sum(int a, int b)
{
  return a + b;
}


为什么不能#define与您的班级名称相同。例如在我的脚本“数学”中?
https://repl.it/repls/UnwillingFreeHeterodontosaurus

最佳答案

您的#define称为宏,预处理器将宏替换为某些宏。

例如,您将宏Maths定义为不被替换,这就是预处理器将要做的。定义class Maths { ... }将替换为class { ... }。这是无效的。

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

关于c++ - Cpp在类中定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48251273/

10-11 16:25