Visual Studio 运算符 += 不明确 [关闭]

Posted

技术标签:

【中文标题】Visual Studio 运算符 += 不明确 [关闭]【英文标题】:visual Studio operator += is ambiguous [closed] 【发布时间】: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的类成员真的很难看。 【参考方案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 构建之间切换就像切换预处理器开关一样简单。不是。

以上是关于Visual Studio 运算符 += 不明确 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

当只有一个具有给定名称的方法时,Visual Studio会声明存在不明确的调用

如何评价Visual Studio Code

如何用visual studio2012编c++程序?

Visual Studio 2012 - %(Link.OutputFile)

项目未显示为在Visual Studio 2013中签入TFS

如何只用visual c++编译器而不安装visual studio