【问题标题】:int Method in C++ Class "Requies and Identifier"C++ 类“请求和标识符”中的 int 方法
【发布时间】:2025-12-23 17:35:06
【问题描述】:

我正在尝试创建一个类来包含我拥有的 CRC 数学表手册中的一些数学运算,在创建其中一个函数时,我遇到了一个以前从未出现过的奇怪错误。 cpp和header的代码如下:

//Header File
#include <iostream>
#include <cmath>
#include <string>
#define int "CRCMathLib_H"

using namespace std;

class CRCMathLib
{
public:
    int DoReturn_Totient(int Toter); //Error comes from here when trying to declare as an int
};

//CPP Class File
#include "CRCMathLib.h"
#include <iostream>
#include <cmath>
#include <string>

using namespace std;

int CRCMathLib::DoReturn_Totient(int Toter)
{

    return 0;
}

//CPP Main File
#include <iostream>
#include <cmath>
#include <string>
#include "CRCMathLib.h"

using namespace std;

int main()
{
    return 0;
}

主文件目前还没有做任何事情,因为这是一个全新的文件,用于这些操作,我相信这可能是一个预处理错误,并且当我在另一台使用 VS 的 PC 上运行它时,它没有出现在 int 语句上它能够阅读该声明。任何事情都会有所帮助。它还请求对头文件进行删除,所以这就是我将 int 放在那里的原因,这可能是问题吗?删除它会返回没有减速的错误。

【问题讨论】:

  • 这是什么声明? #define int "CRCMathLib_H"
  • 奇怪的猜测。由于return 0.0; 实际上是在尝试返回一个浮点 值,如果更改为return 0;return Toter + 2; 会发生什么?除了未使用的参数int Toter之外,真的没有任何跳出来的东西(当然代码也真的什么都不做)
  • 我回去编辑了,bc改成了double,我忘了改返回值,应该是return 0,抱歉
  • 至于 define 方法中的 decleration,我添加了它,因为 VS 在添加 decleration 后抱怨它没有 decleration,我不知道为什么需要这样做(可能不是),程序正常通过了它
  • 好吧,"CRCMathLib_H" DoReturn_Totient("CRCMathLib_H" Toter); 绝对不是一个有效的函数原型。我怀疑你的意思是#include,但意外写了#define,因为你在另一个文件中写对了。

标签: c++ class methods declaration


【解决方案1】:

在您的 .h 中删除 #define int "CRCMathLib_H" 这很可能是一个错字 替换为

#include <iostream>
#include <cmath>
#include <string>
#pragma once

#pragma once 确保您可以安全地从 cpp 实现文件和 main.cpp 中包含您的 .h

您误解了包括通常由以下人员完成的守卫保护

ifndef CRCMathLib_H
#define CRCMathLib_H
// all of you .h file delcaration
#endif

这可以很容易地被文件开头的#pragma once 语句替换

在此处了解更多信息:https://www.learncpp.com/cpp-tutorial/header-guards/

【讨论】:

  • 非常感谢,我从另一个 CRCMathLib 文件的头文件中删除了 ifndef,它工作正常,所以我认为它不是必需的。现在效果很好。