小编Nat*_*one的帖子

C++中的Looser Throw Specifier

这个错误是什么意思?我该如何解决?这是导致它的标头代码:

class BadJumbleException : public exception {
public:
    BadJumbleException (const string& msg); // Constructor, accepts a string as the message
    string& what();                         // Returns the message string
private:
    string message;                         // Stores the exception message
};
Run Code Online (Sandbox Code Playgroud)

这是源代码:

BadJumbleException::BadJumbleException (const string& m) : message(m) {}
string& BadJumbleException::what() { return message; }
Run Code Online (Sandbox Code Playgroud)

编辑:这是错误:

'virtual BadJumbleException :: ~BadJumbleException()的松散抛出说明符

c++ c++11

11
推荐指数
1
解决办法
2万
查看次数

在std :: greater和std :: less上的C++ 11条件表达式得到了不同类型的错误

以下与条件表达式相关的代码:

typedef unsigned char uchar;
uchar data[100];
// assign something to array[] here
uchar *start = data;
uchar *end = data+100;
bool cond = f();  // f() could return true or false
uchar *itr = std::upper_bound(start, end, uchar(20), 
                cond? std::greater<uchar>() : std::less<uchar>());
Run Code Online (Sandbox Code Playgroud)

得到这样的错误:

error: operands to ?: have different types 
‘std::greater<unsigned char>’ and ‘std::less<unsigned char>’
Run Code Online (Sandbox Code Playgroud)

这是编译器错误吗?根据我的直觉,这两个仿函数应该具有相同的类型.

c++ c++11

8
推荐指数
2
解决办法
363
查看次数

在vs2008 SP1中禁用已检查的迭代器时出现问题(_HAS_ITERATOR_DEBUGGING = 0)

当我尝试禁用已检查的迭代器时,我在调试模式下运行vs2008 SP1时遇到了一些麻烦.以下程序重现问题(字符串析构函数崩溃):

#define _HAS_ITERATOR_DEBUGGING 0

#include <sstream>

int do_stuff(std::string const& text)
{
    std::string::const_iterator i(text.end());
    return 0;
}

int main()
{
    std::ostringstream os;
    os << "some_text";
    return do_stuff(os.str());
}
Run Code Online (Sandbox Code Playgroud)

我在gamdev.net上发现了类似的帖子,讨论了在vs2005中遇到这个问题.该帖子中的示例程序按原样编译为2008 SP1 - 但是当我将其修改为使用ostringstream时,我能够解决问题.

从调试器中调试来看,它看起来像是从堆栈中弹出迭代器,然后尝试在_Orphan_All中使用它们,这是某种迭代器检查清理代码......

任何人都可以重现这个问题或者告诉我发生了什么事吗?

谢谢!

c++ crash debugging iterator visual-studio-2008

7
推荐指数
1
解决办法
2350
查看次数

自动将vs2005调试器附加到子进程

我有一个在Visual Studio 2005中构建的主要C++应用程序,称为A.exe.它产生了一个子进程,B.exe.我通过点击F5在调试器中运行进程A - 我知道在进程B中命中断点的唯一方法是等待A启动它,然后运行Debug - > Attach to Process,并手动选择B.exe.如果我需要在进程B中调试初始化代码,这不能很好地工作 - 我必须在开始时进行10秒的睡眠.

我缺少的vs2005 GUI中有一些技巧吗?

顺便说一句,我正在使用本机代码.

谢谢,内森

debugging process visual-studio

6
推荐指数
1
解决办法
1656
查看次数