【问题标题】:Issues when moving code from one class into a new class?将代码从一个类移动到新类时出现问题?
【发布时间】:2009-10-28 15:52:56
【问题描述】:

我的FileReader.cpp 类中有一些解密代码(使用wincrypt.h)。我正在尝试隔离代码并将此解密方法推送到MyCrypt.cpp 类中。然而,在移动它时,我遇到了一堆我以前没有遇到过的错误。对于每个 wincrypt.hwindows.h 特定命令,我都会收到“未找到标识符”或“未声明的标识符”。

什么给了!

更多细节..

示例错误:

错误 C2065:“HCRYPTPROV”:未声明 标识符

错误 C3861:“CryptDecrypt”: 找不到标识符

我包括 windows.h 和 wincrypt.h,就像我在 FileReader.cpp 中一样。

#include "MyCrypt.h"
#include <windows.h>
#include <wincrypt.h>

MyCrypt.h 定义为:

#pragma once

class MyCrypt
{
public:
    static char *DecryptMyFile(char *input, char *password, int size, int originalSize) ;

private:
    static const DWORD KEY_LENGTH = 128;
}

如果我重新排列包含文件,则会收到以下错误:

错误 C2628: 'MyCrypt' 后跟 'char' 是非法的(你忘了 ';'?) 错误 C2556: 'MyCrypt *MyCrypt::DecryptMyFile(char *,char *,int,int)' :重载函数的不同之处仅在于返回类型与 'char *MyCrypt::DecryptMyFile(char *,char *,int,int)

但在我的代码中没有任何地方使用它所说的这种重新定义..

【问题讨论】:

  • 你能发布更多细节吗?比如,它出错的行和你得到的完整错误?
  • MyCrypt.cpp #include wincrypt.h 和 windows.h 是否与 FileReader.cpp 相同?
  • 在描述中添加了更多细节

标签: c++ class


【解决方案1】:

检查 MyCrypt.h 并确保在右大括号后有一个 ;。我错过了一些相当奇怪的错误消息。您发布的示例中缺少它。

【讨论】:

  • 这也让我难过几次,尤其是当我在使用其他语言一段时间后回到 C++ 时。这是我现在检查的第一件事。 :)
【解决方案2】:

你忘记了类声明后的分号吗?

【讨论】:

    【解决方案3】:

    听起来您从 FileReader.cpp 中移出的代码要么引用了 MyCrypt.cpp 中不存在的该类的成员变量,要么引用了 FileReader.cpp 中#included 中未包含在 MyCrypt.cpp 中的方法.

    【讨论】:

    • 这是我最初的印象,但似乎并非如此。我已经用更多细节更新了我的描述。
    【解决方案4】:

    听起来您现在在新的 MyCrypt.cpp 文件中缺少一些#include,例如 windows.h 和 wincrypt.h,但我们需要实际的错误来特别有用。

    【讨论】:

    • 我也这么认为,但仔细检查时我不相信。我在描述中添加了更多细节
    【解决方案5】:

    一些想法:

    • 您是否在没有先引用对象的情况下调用方法(因为它们在旧类中并且现在已移动,也许您忘记通过新类中的指针调用它们?)
    • 您可以尝试改变包含语句的顺序。
    • 您使用的是预编译头文件吗?你可以试试看是否能解决问题。

    【讨论】:

    • 通过并尝试这些...删除我的预编译标头引用会产生编译器错误。 “查找预编译头文件时出现意外的文件结尾”
    • 将重新排列我的包含语句的结果添加到描述中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多