将代码从一个类移动到新类时出现问题?

Posted

技术标签:

【中文标题】将代码从一个类移动到新类时出现问题?【英文标题】: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 相同? 在描述中添加了更多细节 【参考方案1】:

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

【讨论】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

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

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

【讨论】:

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

一些想法:

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

【讨论】:

通过并尝试这些...删除我的预编译标头引用会产生编译器错误。 “查找预编译头文件时出现意外的文件结尾” 将重新排列我的包含语句的结果添加到描述中

以上是关于将代码从一个类移动到新类时出现问题?的主要内容,如果未能解决你的问题,请参考以下文章

将 .net 应用程序移动到新服务器时出现 SQL Server 连接错误

将 XAMPP 文件夹移动到新计算机,现在在尝试启动 MySQL 时出现“(XAMPPErrorDomain error 1.)”

尝试将多个函数聚合到新列时出现意外的 KeyError Pandas

从一个控制器移动到另一个控制器时出现未知错误?

将 StoryBoard 从 Xcode 更新到 Xcode 9 时出现 UI 问题

将 pimcore 从服务器移动到本地时出现致命错误