我的代码产生了这个错误:
运行时检查失败#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);
答案 0 :(得分:2)
我假设你的意思是C ++,我假设InitializeStructures
的签名是:
void InitializeStructres(ISTATUS a, INODE b, IBLOCK c)
问题是您通过 value 传递对象。 InitializeStructures
将获得您传入的这些对象的副本,InitializeStructures
所做的任何内容都不会反映在您传入的对象上。
由于复制操作,这将导致错误。您正在尝试复制对象(“使用”对象)而未初始化它。
我假设您要按如下方式创建函数签名:
void InitializeStructres(ISTATUS& a, INODE& b, IBLOCK& c)
这样InitializeStructures
不复制对象;相反,它将直接对通过引用传入的对象进行操作。
快速注意:您的类型/变量命名实际上不是标准的。像IStatusObject
这样的名称通常是接口(例如IUnknown
)。全大写名称通常是遗留名称或C符号。