将代码从一个类移动到新类时出现问题?
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.h
或 windows.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