- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我得到这个错误:“错误:没有上下文类型信息的重载函数”。
cout << (i % 5 == 0) ? endl : "";
我正在做的事情可行吗?我只是做错了,还是我必须重载 << 运算符?
最佳答案
它不会那样工作(即使你修复了优先级错误)。这里有两个问题,第二个比第一个更严重。
第一个问题是std::endl
是一个模板。它是一个函数模板。模板必须是专门的。为了专门化该模板,编译器必须知道(推断)模板参数。当你做的时候
std::cout << std::endl;
operator <<
期望的特定函数指针类型是编译器用来弄清楚如何专门化 std::endl
的东西模板。
但是在您的示例中,您基本上“分离”了 std::endl
来自 operator <<
通过移动 std::endl
进入 ?:
子表达式。现在编译器必须先编译这个表达式
(i % 5 == 0) ? endl : ""
此表达式无法编译,因为编译器不知道如何专门化 std::endl
模板。没有任何上下文就无法推断模板参数。
例如,这个简单的C++程序
#include <iostream>
int main() {
std::endl;
}
也将因为同样的原因而无法编译:没有上下文,编译器不知道如何实例化 std::endl
。 .
您可以通过显式指定模板参数来“帮助”编译器解决问题
(i % 5 == 0) ? endl<char, char_traits<char> > : "";
这将明确告诉编译器如何实例化 endl
.您收到的原始错误消息将会消失。
但是,这将立即揭示该表达式的第二个更严重的问题:specialized endl
是一个函数(在此上下文中衰减为函数指针),而 ""
是一个字符串文字。您不能在 ?:
中混合使用函数指针和字符串文字运营商那样。这些类型是不兼容的。它们不能一起用作三元的第二个和第三个操作数 ?:
.编译器将针对第二个问题发出不同的错误消息。
所以,基本上,你在这里遇到的最新问题就好像你试图做类似的事情
cout << (i % 5 == 0 ? 10 : "Hi!");
这不会编译,原因与您的表达式无法编译的原因相同。
所以,你试图写的表达式不能那样写。在不尝试使用 ?:
的情况下重写它运营商。
作为支持,请参阅以下文字记录:
$ cat qq.cpp
#include <iostream>
using namespace std;
int main (void) {
int i = 5;
cout << ((i % 5 == 0) ? endl : "");
return 0;
}
$ g++ -o qq qq.cpp
qq.cpp: In function 'int main()':
qq.cpp:5: error: overloaded function with no contextual type information
关于C++ : cout with a terenary if-statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5726427/
在 go lang 中使用“If with a short statement”有什么好处。引用:go tour if v := math.Pow(x, n); v < lim { retur
完全错误: Warning: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT
完全错误: Warning: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT
我有三个存储过程 Sp1、Sp2 和 Sp3。 第一个 (Sp1) 将执行第二个 (Sp2) 并将返回的数据保存到 @tempTB1 中,第二个将执行第三个 (Sp3) 并将数据保存到 @tempTB
我已将 FLAG 设置为 1,并且正在执行 ARG 值应该仅为 DEV。但是我得到的是 ARG= DEV + CLIENTID 000023 // FLAG=1 000026 // I
我已将 FLAG 设置为 1,并且正在执行 ARG 值应该仅为 DEV。但是我得到的是 ARG= DEV + CLIENTID 000023 // FLAG=1 000026 // I
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
PMD告诉我 A switch with less than 3 branches is inefficient, use a if statement instead. 这是为什么呢?为什么是3?他
我刚开始学习 Racket,所以我仍在努力弄清楚这门语言的复杂性。我正在尝试在列表中实现我自己的搜索功能。如果函数找到它,则返回索引,否则返回 -1。 (define (find-index list
在 Kotlin 中,您可以使用类似于三元运算符的 if 语句。 我们可以选择做这样的事情: val x = if (isOdd) 1 else 2 但是如果我们有多个变量需要根据某些条件进行设置,那
在我的 Android 应用程序中,我尝试使用 XMLPullParser 使用以下代码读取 xml 文件: while (eventType != XmlPullParser.END_DOCUMEN
这个问题已经有答案了: Boolean expressions in Java (8 个回答) 已关闭 7 年前。 我遇到过一些情况,其中第一个似乎改变了 boolean 值,而第二个却没有!两者之间
我基本上想做的是: select * from request where id = 1 and created_at like (today's date); 但使用 Eloquent 。 我试过:
我不确定为什么会收到此代码。基本上我希望能够动态定位我的发射器,但是当我添加一个选项来检查位置并根据需要进行纠正时,我不断收到此错误。 添加的代码是 if (
何时使用语句而不是准备语句。我想语句用于没有参数的查询,但为什么不使用准备好的语句呢?对于没有参数的查询,哪个更快。 最佳答案 I suppose statement is used in queri
我必须创建一个表,如下所示 借款人(客户编号,贷款编号) 如果客户没有超过 3 笔贷款,则可以贷款。 我创建的表如下 create table borrower( customerno int(5),
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicates: Is "else if" faster than "switch() case"? What is the
typescript 版本 2.2.2 我在我的 UserRoutzr.ts 中写了这个要求 const users = require(path.join(process.cwd() + "/da
我有一个用 JPQL 编写的应用程序,它可以命中非常不同的查询(在不同的资源上)。 对于很多此类查询,我需要知道结果总数(计数),因为我没有应用任何 LIMIT/OFFSET 由于此查询的性质非常不同
我对以下 Java 语句感到困惑: ArtClass artClass0 = new ArtClass(); int int3 = 73; boolean boolean0 = artClass0.f
我是一名优秀的程序员,十分优秀!