2011-12-25 47 views
0

我的代码如下产生这个错误:运行时检查失败 - 变量被用于没有被初始化

Run-Time Check Failure #3 - The variable 'IBlockObject' is being used without being initialized

我真的停留在此。我知道有一个初始化问题,但我不知道如何解决它。下面是代码:

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); 
+1

你为什么把这个标记为3种语言?你是否诚实地试图在三种不同语言的编译器中编译相同的代码?你应该显示'InitializeStructures'的签名。 – tenfour

回答

2

我会假设你的意思是C++,我会承担的InitializeStructures的签名是:

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

的问题是你是传递的对象。 InitializeStructures将获得自己要传递这些对象的副本,以及任何InitializeStructures并不会反映在你的对象传入。

这将导致因为复制操作的误差。您正试图复制一个对象(“使用”对象)而未初始化它。

我假设你想函数签名如下:

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

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

快速提示:您的类型/变量命名实际上不是标准。像IStatusObject这样的名称通常是接口(例如IUnknown)。全大写的名称通常是传统或C符号。

+0

我真的很感谢你的帮助,但是这个东西可以解决Visual Studio给我的语法错误 – user1115541

相关问题