- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想我没能理解 C++ 的一些更精妙的地方。我想为我的程序做的事情设置一个日志,并发现了 std::clog
,这在理论上似乎可以做我想做的事情,但实际上并没有。
如果我执行以下操作,clog 会按预期工作并将“测试 1”写入屏幕,而“测试 2”会显示在文件中:
int main ()
{
clog << "Test 1" << endl;
streambuf* original_buffer = clog.rdbuf (ofstream ("test.log").rdbuf ()));
clog << "test 2" << endl;
clog.rdbuf (original_buffer);
return 0;
}
但如果我将所有这些都放入一个类中,那么“测试 1”将写入屏幕,创建 test.log,但里面什么也没有,“测试 2”也无处可寻!:
class IerrLog
{
std::streambuf * original_buffer;
public:
IerrLog ()
{
std::ofstream logFile ("test.log");
original_buffer = std::clog.rdbuf (logFile.rdbuf ());
}
~IerrLog ()
{
std::clog.rdbuf (original_buffer);
}
};
int main () {
clog << "Test 1" << endl;
IerrLog someLog ();
clog << "Test 2" << endl;
return 0;
}
我错过了什么?
编辑:如果我在 valgrind 中运行后者,我会得到这样的错误(前者运行干净):
Invalid read of size 8
at 0x39598993E5: std::ostream::flush() (in /usr/lib/libstdc++.so.6.0.10)
by 0x395989B5F2: std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&) (in /usr/lib/libstdc++.so.6.0.10)
by 0x400F8E: main (main.cc:23)
Address 0x7ff0006c8 is just below the stack ptr. To suppress, use: --workaround-gcc296-bugs=yes
我还没有讨厌到认为我(一个低级普通程序员)发现了这样一个简单程序的编译器错误,但这让我更加困惑,valgrind 显然发现后者在某种程度上是错误的,即使我试图使它们在功能上完全相同。
最佳答案
我假设您要创建 IerrLog 的堆栈变量。你需要改变
IerrLog someLog ();
到
IerrLog someLog;
您的原始语句将被编译器解释为函数 someLog() 的声明,它不接受任何参数并返回一个 IerrLog。
您还应该将文件创建为成员变量,而不是在堆栈上。
关于c++ - 为什么我换的木屐不粘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/850724/
在 Vaadin 7.0,显示时JavaBean Table 中的数据与 BeanContainer ,用新数据刷新表的正确方法是什么? 最佳答案 该表通过监听器监视表项的属性。如果您通过表的 Ite
首先,我使用的是带有 Axis2 1.6.2 的 eclipse,我正在 tomcat 6 上部署我创建的 Web 服务。Web 服务是在 eclipse 中通过自上而下的方法创建的。 我被要求使对我
我已将 Rails 3.1.1 应用程序升级到 Rails 3.1.3,现在,对于每个请求,它仅响应错误数量的参数(3 for 1)。不幸的是,它没有说明错误在哪里,并且应用程序跟踪为空。我认为存在一
我是一名优秀的程序员,十分优秀!