小编Kur*_*son的帖子

在编译器中找不到基类中实现的虚函数

我有一种情况,似乎编译器没有找到与另一个成员函数同名的虚函数的基类定义/实现.

struct One {};

struct Two {};

struct Base
{
    virtual void func( One & );
    virtual void func( Two & ) = 0;
};

struct Derived : public Base
{
    virtual void func( Two & );
};

void Base::func( One & )
{}

void Derived::func( Two & )
{}

// elsewhere
void this_fails_to_compile()
{
    One one;
    Derived d;
    d.func( one );
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Visual C++ 2008.错误消息是:

错误C2664:'Derived :: func':无法将参数1从'One'转换为'Two&'

我原以为基于类型的调度可以工作并调用定义的基类函数.如果我添加一个Derived::func( One & )它确实编译并被正确调用,但在我的情况下,该函数的版本可以在基类中完成,通常派生类本身不需要实现它.我目前正在通过在基类中放置一个不同名称的非虚函数来解决它,该函数将调用转发给导致问题的函数:

// not virtual, although I …
Run Code Online (Sandbox Code Playgroud)

c++ virtual inheritance function

17
推荐指数
1
解决办法
3965
查看次数

跟踪点中允许哪些表达式?

在Visual Studio中创建跟踪点时(右键单击断点并选择"When Hit ..."),对话框中包含此文本,强调我的:

您可以通过将变量或其他表达式放在花括号中来包含变量或其他表达式的值...

允许什么表达?

trace breakpoints visual-studio

17
推荐指数
1
解决办法
3707
查看次数

在C++中,给定A类中的成员函数,我们是否可以将其访问权限仅限于B类,而不允许B完全朋友访问A?

可能重复:
干净的C++粒度朋友等价?(答案:律师 - 客户成语)

我想要这几次,并且无法想出一个体面的方法来做到这一点.

假设我在A类中有一个成员函数.我希望能够从一个不相关的B类调用该函数,但通常不能调用.您可能会说,"当然,将该功能设为私有,并宣布B为A的朋友." 这就是我一直在做的事情,但似乎有点矫枉过正.我真的不想让B访问A中的所有内容,只需要一个函数.

简而言之:A::func()只能由B级调用,但B不是A的朋友.可能吗?

c++ encapsulation

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

在Windbg中,如何在调试时列出枚举值?

通常,enum值是简单的编译器递增值或直接设置为整数文字,因此可以通过查看源文件轻松推导或直接看到这些值.

但是,有时enum值用于将类内常量设置为等于其他位置定义的值,或者设置为不易复制的编译时表达式的结果.

有没有办法让Windbg向我展示enum那些棘手案件中每个成员的实际价值?

c++ debugging enums windbg

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

更改默认GUID序列化格式

默认情况下,Web API 2中的JSON和XML序列化程序只是调用ToString()序列化Guid,这意味着它包含破折号:fd190000-5532-8477-e053-9a16ce0af828.我真的想将默认序列化更改为返回的格式ToString("N"),其中不包括短划线:fd19000055328477e0539a16ce0af828.

我发现这篇文章是关于创建一个JsonConverter并重写WriteJson()要使用的方法ToString("N").这适用于JSON,但我没有找到任何类似的XML序列化.

有没有办法只实现一次,无论有多少MediaTypeFormatters?如果没有,我如何覆盖XML序列化?

asp.net serialization guid asp.net-web-api

5
推荐指数
0
解决办法
448
查看次数

使用Windbg进入MFC源代码

我需要在Windbg中设置哪些设置才能像使用Visual Studio一样进入/通过MFC源代码?

debugging mfc windbg

4
推荐指数
1
解决办法
2214
查看次数

在 Windbg 中,当抛出特定的 C++ 异常时,我可以跳过中断吗?

在 Visual Studio 中,通过“调试”>“异常...”对话框,您可以设置要中断或跳过的特定 C++ 异常类型。在 Windbg 中,打开 C++ 异常中断sxe eh是全部或全部。

有什么方法可以跳过特定 C++ 异常类型的中断吗?相反,有没有办法只打破特定类型?

c++ debugging windbg exception

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