2010-07-14 85 views
0

我有3个文件涉及到这个问题。 file.h,file.C和user.C.C++头文件变量范围问题

file.h有私有成员fstream日志。

在file.C的构造函数中,它会打开日志。它不在构造函数中这样做,但构造函数调用函数OpenLog()。

file.h也有一个内嵌关闭功能:

CloseLog() {if (logs) logs.close();}

文件user.c的拥有它创建的实例文件的退出功能,然后调用CloseLog。它在这一点上划分错误。我创建了一些其他虚拟测试,似乎日志丢失在混合的某个地方...

从file.C到user.C,然后返回到file.C导致此。如果我将fstream日志作为file.C中的全局文件,那么它可以工作 - 但我宁愿避免使用全局文件。

有关我应该在这里做什么的想法?请让我知道如果我应该发布更多关于此的代码,我可以设置一些虚拟的东西来更好地演示。

**这里有更多的代码,按要求 - 我不能复制和粘贴,所以请原谅缺乏它,请**

我会打电话给班helpME.h,helpME.C和user.c的

//helpME.h
#ifndef _helpME_H
#define _helpME_H

#include < iostream>
#include < fstream>
//various includes

class helpME {
private:
fstream logs;

public:
void CloseLog() {if (logs) logs.close();}
};
#endif

//end helpME.h

//helpME.C
void helpME::helpME(int argc, char** argv)
{
//various code
OpenLog();
}

void helpME::OpenLog()
{
//logname is set above, i had a print statement before that showed this is correct
logs.open(logname, ios::in | ios::out | ios::trunc);
}

//end helpME.C

//user.C
void user::quitHelpME(item)
{
helpME* hME = (helpME*) item;
hME->CloseLog();
}

//end user.C

再次 - 请原谅缺乏明确的,我想我可能只是迷惑的东西加入这个更多...这个代码是在另一台电脑,并且不能被复制。

+3

是的,你应该发布(你的代码的相关部分)。你的描述对我来说并不完全清楚。 – 2010-07-14 20:50:53

+2

一个注意事项:文件没有构造函数/析构函数/成员,类就是这样。 – 2010-07-14 20:52:08

+0

为了强调彼得所说的话,这是一个形式很糟的问题,因为你的描述不仅是不完整的,而且是正确的错误。也不清楚“从file.C到user.C”的意思。发布一些代码,最好是一个完整的最小示例。 – 2010-07-14 21:25:41

回答

0
void user::quitHelpME(item) 
{ 
helpME* hME = (helpME*) item; 

这不会创建一个实例,它是用C风格的铸造无论从任何产品的指针helpME投。

如果item为NULL,那么调用它的一个方法会导致seq错误。

否则在你的例子中还没有足够的细节给你一个答案,代码目前听起来很合理。

+0

XtPointer项目 ...正在调查那现在......谢谢你! (有些人可能会解释为不清晰 - 这是传统代码,推动是'编译'...没有太多的动力来清理它或理解它,所以我正在学习,因为我去了。缺少知识。) – glazedandconfused 2010-07-14 21:52:41

0

因为您已经在.h文件中声明了变量,所以您有两个副本。编译器不会'看到'.h文件,它只是将文件中的内容复制/粘贴到.C文件中,所以,这就是为什么您有两个变量副本。

变量声明为在.h文件extern,并没有extern只有一个.C文件再次声明,并在该文件中的任何声明不使用static。应该解决您的问题。

+0

非常感谢 - 当我这样做时,我收到消息'错误:为日志指定的存储类'。我看了看,看起来我可能在我的.h某处有问题,所以我正在寻找。 再次,谢谢。 – glazedandconfused 2010-07-14 21:44:08

+0

http://cboard.cprogramming。com/c-programming/113962-my-error-storage-class-specified-parameter.html 是我正在查看的链接,以供将来参考其他人 – glazedandconfused 2010-07-14 21:44:38