我的下面的代码正在产生此错误:
运行时检查失败#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符号。