首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用C++11编译后,模板函数中断

使用C++11编译后,模板函数中断
EN

Stack Overflow用户
提问于 2018-12-11 03:50:40
回答 1查看 129关注 0票数 3

我有一个非常简单的模板函数来比较两个structsrank字段

template<typename T>
bool comp_rank(const T &a, const T &b){
    return a.rank < b.rank;
}

这工作得很好,直到我用-std=c++11编译。现在,我得到了错误

error: parameter "b" is not a type name
      return a.rank < b.rank;
                      ^

./src/util.h(123): error: expected a ">"
      return a.rank < b.rank;
                       ^

怎么回事?这看起来像是基本的语法,在C++11之后我会惊讶地发现它已经改变了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-11 03:54:28

你的问题是你使用

using namespace std;

因为c++11引入了模板rank

查看此处:https://en.cppreference.com/w/cpp/types/rank

如果您删除了using语句,一切都会再次正常编译!

这是由gcc 8.2.1给出的错误消息

main.cpp: In function 'bool comp_rank(const T&, const T&)':
main.cpp:41:23: error: type/value mismatch at argument 1 in template parameter list for 'template<class> struct std::rank'
    return a.rank < b.rank;

无论如何,使用using namespace ...都不是一个好主意。您已经举了一个很好的例子;)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53712642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档