我的下面的代码正在产生此错误:


  运行时检查失败#3-变量'IBlockObject'的使用未经初始化


我真的很坚持。我知道有一个初始化问题,但我不知道如何解决。这是代码:

typedef struct{ //ISTATUS Structure
    long statusBit;
}ISTATUS;

typedef struct{ // INODE Structure
    char fileName[20];
    long INodeNumber;
    long BlockAddress;
    long NextINodeAddress;
}INODE;

typedef struct{ //IBLOCK Structure
    long BlockNumber;
}IBLOCK;

ISTATUS IStatusObject;
INODE INodeObject;
IBLOCK IBlockObject;


InitializeStructures(IStatusObject, INodeObject, IBlockObject);

最佳答案

我假设您的意思是C ++,并且我假设InitializeStructures的签名是:

void InitializeStructres(ISTATUS a, INODE b, IBLOCK c)


问题是您要按值传递对象。 InitializeStructures将获得您传入的这些对象的副本,而InitializeStructures的任何内容都不会反映在传入的对象上。

由于复制操作,这将导致错误。您试图复制对象(“使用”该对象)而未对其进行初始化。

我假设您要按以下方式进行功能签名:

void InitializeStructres(ISTATUS& a, INODE& b, IBLOCK& c)


这样InitializeStructures不会复制对象;相反,它将直接对通过引用传递的对象进行操作。

快速说明:您的类型/变量命名确实不是标准的。像IStatusObject这样的名称通常是接口(例如IUnknown)。而且全大写名称通常是旧符号或C符号。

07-28 04:44