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 并展示给我们看吗?
另外,请将 full 和 Complete 错误输出复制粘贴到问题中。此类错误消息通常包含更多信息说明,说明编译器为何认为存在歧义。
您绝对需要提供CAppDoc::d
的定义。尽管如此,我们只能猜测。有一个叫d
的类成员真的很难看。
【参考方案1】:
不确定d
变量是什么,但是...尝试将其转换为字符:
pDoc->d += (TCHAR)nChar;
【讨论】:
谢谢,程序成功了。 @Breacher:你可能错了。这确实使编译器静音,但程序可能仍然是错误的。我们不知道,因为您还没有分享相关信息。要么这样做,要么继续使用可能会以您意想不到的方式失败的解决方案。无论您要解决什么问题,使用TCHAR
都是错误的解决方案。
@IInspectable 如果d
是CString
我很确定演员表是有效的。
有很多场景,演员表是有效的。还有很多场景不是这样的。你不知道你在哪个分区,因为你对代码一无所知。我的最后陈述仍然是:使用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
会更清楚。
呃,TCHAR
是 char
或 wchar_t
,取决于是否定义了 UNICODE
预处理器符号。尽管如此,在 2017 年仍然没有理由使用 TCHAR
。
@IInspectable 我写的“太宽泛,无法评论”。并且通过使用(TCHAR)
它将适用于任何配置。如果我写了wchar_t
或char
,那么 OP 将有 50% 的机会评论为:“它仍然无法编译”。
它会为每个配置编译。这是否也有效是一个完全不同的问题。 2 十年后,您似乎仍然建议,在 ANSI 和 Unicode 构建之间切换就像切换预处理器开关一样简单。不是。以上是关于Visual Studio 运算符 += 不明确 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
当只有一个具有给定名称的方法时,Visual Studio会声明存在不明确的调用
Visual Studio 2012 - %(Link.OutputFile)