English 中文(简体)
为什么静态流体不工作
原标题:why static ofstream doesn t work
  • 时间:2012-04-21 04:00:10
  •  标签:
  • c++
  • ofstream

我正在C++中开发一个有多份文档奥操作的方案。 我在共同的头脑中确定了一个静态的下游,以便该项目在任何地方都能获得。 守则的结构如下:所有通用变量均在 com、测试、h和测试中界定。 c 用于一个称为OPClass的班级。 cpp携带主要方案

COM.H:

#ifndef __CLCOM__
#define __CLCOM__
#include <sstream>
#include <fstream>
#include <iostream>

using namespace std;

static ofstream out;
static stringstream ss;

#endif

<>TEST.H:

#ifndef __CL__
#define __CL__
#include <iostream>
#include <fstream>
#include "com.h"

using namespace std;

class OPClass
{
  public:
   void run(void);
   void show(ostream &o) const;
};
#endif

<>TEST.CPP:

#include "com.h"
#include "test.h"

void OPClass::run(void)
{
  out << "Here is run()" << endl;
  show(out);
}

void OPClass::show(ostream &o) const
{
  o << "hello!" << endl;
}

MAIN.CPP:

#include "com.h"
#include "test.h"

void runmain(void)
{
  OPClass op;
  out.open("output.txt", ios::out | ios::trunc);
  out << endl << "State changed!" << endl;
  op.run();
  if (out.is_open()) out.close();
}

int main(int argc, char* argv[])
{
  runmain();
  return  0;
}

如你所知,下游的静态被点名出来,并将在主程和班级中点名。 我正在使用ming夫32, t看任何汇编或操作的问题。 但似乎只有主编的资料才会写到产出档案中。 在该类别中写到该档案的任何其他信息从没有出现在产出档案中。 为什么这样,以及我如何能够在项目的所有地方撰写一份共同档案? 感谢。

最佳回答

每一汇编单位正在检索其自己的<代码>和out。 因此,从主人来看,他们的情况不同。 c 低于测试。

在这里,你确实不需要静态。 为了解决这一问题,而不是在标题档案中宣布变数及其分配,你只需要使用<代码>extern/code>的关键词。

#ifndef __CLCOM__
#define __CLCOM__
#include <sstream>
#include <fstream>
#include <iostream>

// Note: don t put "using" statements in headers
// use fully qualified names instead 
extern std::ofstream out;
extern std::stringstream ss;

#endif

如果你确实向你们提出声明,那就只是确保它只站在一个地方。 这可能是一种礼让文件,或者说,你可以主宰它。 c 如果适合您的项目。

std::ofstream out;
std::stringstream ss;

这种全球变数并不是一个好的想法,不管怎么说。

问题回答

预防性声明: 你应接受“HoslessFork”的答复。

简而言之,展示所发生情况的一个简单办法是打印<条码>版的地址。 每当你试图使用否决权。

如果你补充这些声明的话:

void OPClass::run(void)
{
  cout << "Address of  out  = " << &out << endl;
  out << "Here is run()" << endl;
  show(out);
}

而且:

void runmain(void)
{
  cout << "Address of  out  = " << &out << endl; 
  OPClass op;
  out.open("output.txt", ios::out | ios::trunc);
  out << endl << "State changed!" << endl;
  op.run();
  if (out.is_open()) out.close();
}

请注意,关于<编码>的两份印刷说明(<>>>>>>>>显示两个不同的地址。 这应当告诉你,你实际上重新获得了作为两个不同变量创建的<代码>out两个实例。 您的<编码>OPClass中的方法正试图书写一个完全不同的产出流。 它与你在全球背景下重新使用<>static的方式有关;它并不像你认为的那样行事。 在全球背景下,宣布了一些<代码>static。 它对当地档案的范围具有约束力。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签