gpt4 book ai didi

c++ - 我该如何解决这个 Visual Studio 编译器 BUG?

转载 作者:搜寻专家 更新时间:2023-10-31 01:17:05 26 4
gpt4 key购买 nike

这是 visual studio 中“著名的”/vd2 错误,更多信息例如: http://mcdougalljonathan.blogspot.com/2011/12/visual-c-2010-stdistringstream-crash-in.html或谷歌搜索“visual studio vd2 gtkmm”关键字..

所以我必须使用 VS2010 生成一个包含大量这些模式的代码的版本。看起来不可能,我还有10天。有什么想法吗?

#include <iostream>
#include <sstream>

struct Object
{
virtual ~Object() {}
};

struct Base: virtual public Object
{
Base() :Object()
{
// upcast and downcast
Object* o = static_cast<Object*>(this);
Base* b = dynamic_cast<Base*>(o);
std::cout << " this: " << this << " after cast: " << b;
// should be the same address
if ( this != b)
std::cout << " check address: NOK";
else
std::cout << " check address: OK ";
}
};

struct Derived: public Base
{
int i;
};

int main()
{
Derived d;
std::cout << " end arrived: ";
std::stringstream* ss = new std::stringstream;
delete ss;
std::cout << "OK";
}

编辑

我有一个想法...所以我想将每个 std::stream 替换为包装器,例如。 std2::stream,我在其中将它们动态分配给智能指针,然后在没有/vd2 开关的情况下编译该包装器实现。我会在第二天尝试...

所以我想要这样的东西

// compile without /vd2
#include <sstream>
#include <iostream>
#include <boost/scoped_ptr.hpp>

namespace std2
{
class stringstream
{
public:
stringstream()
{
m_stream.reset(new std::stringstream);
}
template<typename T>
std::stringstream& operator<<(const T& param)
{
*m_stream << param;
return *m_stream;
}

std::string str() const
{ return m_stream->str(); }
private:
boost::scoped_ptr<std::stringstream> m_stream;

};
}

int main()
{
std2::stringstream stream;
stream << "DDDD" << std::endl;
std::cout << stream.str() << std::endl;
return 0;
}

最佳答案

可以为您解决的随机想法:

  1. 不要使用 VS2010(坚持使用 2008 版本)
  2. 使用不同的 STL(可能会非常痛苦,具体取决于您的使用情况,但据我所知,问题出在 2010 年包含的 STL 中)。

我没有看到更多选项,除了更改代码以在构造函数/析构函数中不使用 dynamic_cast,并完全删除/vd2

关于c++ - 我该如何解决这个 Visual Studio 编译器 BUG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com