【问题标题】:visual Studio operator += is ambiguous [closed]Visual Studio 运算符 += 不明确 [关闭]
【发布时间】:2017-10-06 08:06:53
【问题描述】:

第一次使用Visual Studio 2017 Enterprose,无法制作简单的键盘处理程序。

我得到这个编译错误:

错误:C2593 'operator +=' 不明确

在以下代码段中:

void CAppView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // TODO: Add your message handler code here and/or call default

    CView::OnChar(nChar, nRepCnt, nFlags);
    CAppDoc *pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    pDoc->d+=nChar;
    //Invalidate();
}

我使用了相同的代码,它在 VS 6.0 企业版的 MFC C++ 应用程序中工作。

【问题讨论】:

  • pDoc->d 是什么?你能尝试创建一个Minimal, Complete, and Verifiable Example 并展示给我们看吗?
  • 另外,请将 fullComplete 错误输出复制粘贴到问题中。此类错误消息通常包含更多信息说明,说明编译器为何认为存在歧义。
  • 您绝对需要提供CAppDoc::d的定义。尽管如此,我们只能猜测。有一个叫d的类成员真的很难看。

标签: c++ mfc


【解决方案1】:

不确定d 变量是什么,但是...尝试将其转换为字符:

pDoc->d += (TCHAR)nChar;

【讨论】:

  • 谢谢,程序成功了。
  • @Breacher:你可能错了。这确实使编译器静音,但程序可能仍然是错误的。我们不知道,因为您还没有分享相关信息。要么这样做,要么继续使用可能会以您意想不到的方式失败的解决方案。无论您要解决什么问题,使用TCHAR 都是错误的解决方案。
  • @IInspectable 如果dCString 我很确定演员表是有效的。
  • 有很多场景,演员表是有效的。还有很多场景不是这样的。你不知道你在哪个分区,因为你对代码一无所知。我的最后陈述仍然是:使用TCHAR 是错误的解决方案,无论您要解决什么问题。除非您要解决的问题是让您的代码为 Windows 95 编译,我们可以排除这种情况,因为 VS 2017 不支持为 Windows 95 编译代码。
【解决方案2】:

我依稀记得很久以前用旧的编译器编译的:

CString foo;
foo += 65;

但是在我的 Visual Studio 2017 中,我遇到了和你一样的错误。

但这有效:

foo += (TCHAR)65;

它实际上将'A' 字符附加到foo 字符串。

所以我想你遇到了这个确切的问题。

【讨论】:

  • 谢谢,程序成功了。我之前尝试将 nChar 类型转换为 Cstring,但它给出了一些新错误。什么是 TCHAR?有一个名为 'd' 的类成员真的很难看;为什么?
  • TCHAR 实际上是char,谷歌一下,太宽泛了,无法评论。为什么d 丑?如果我看到d,我不知道这可能是什么,但如果它被称为例如typedchars 会更清楚。
  • 呃,TCHARcharwchar_t,取决于是否定义了 UNICODE 预处理器符号。尽管如此,在 2017 年仍然没有理由使用 TCHAR
  • @IInspectable 我写的“太宽泛,无法评论”。并且通过使用(TCHAR) 它将适用于任何配置。如果我写了wchar_tchar,那么 OP 将有 50% 的机会评论为:“它仍然无法编译”。
  • 它会为每个配置编译。这是否也有效是一个完全不同的问题。 2 十年后,您似乎仍然建议,在 ANSI 和 Unicode 构建之间切换就像切换预处理器开关一样简单。不是。
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多