在VS2015中定义了这样一个类:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Integer {
public :
int num = ;
Integer(int num) {
this->num = num;
}
Integer() {
Integer();
}
bool operator< (const Integer& lh, const Integer& rh) {
return rh.num < lh.num;
}
};

  对于重载的 < 运算符,显示如下错误:

  网上查找原因,解释如下:

1.你为Book类定义operator==作为成员函数,所以它有一个隐式的Book*参数this指针
2. 一个双目运算符重载应该在类定义之外。 class Book { ... }; bool operator==(const Book& a, const Book & b) { return a.Return_ISBN()==b.Return_ISBN(); }

重新如下定义就对了:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Integer {
public :
int num = ;
Integer(int num) {
this->num = num;
}
Integer() {
Integer();
} };
//双目运算符重载定义在类外
bool operator< (const Integer& lh, const Integer& rh) {
return rh.num < lh.num;
}

如果必须要在类内定义的话,只能定义为单参数的运算符函数:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Integer {
public :
int num = ;
Integer(int num) {
this->num = num;
}
Integer() {
Integer();
}
bool operator< (const Integer& rh) {
return rh.num < this->num; //this指针作为默认参数传入该函数
} };

此时,如果在源文件中定义了如下的模板函数:

template<typename T>
int compare(const T& a,const T& b)
{
if (a < b)
return -;
if (b < a)
return ;
return ;
}

则该模板函数只接受类外定义的双目运算符:

bool operator< (const Integer& lh, const Integer& rh) {
return rh.num < lh.num;
}

而类内定义的单参数运算符

bool operator< (const Integer& rh) {
return rh.num < this->num; //this指针作为默认参数传入该函数
}

会被报错。

C++笔记(1)----此运算符函数的参数太多的更多相关文章

  1. 《JavaScript高级程序设计》读书笔记--ECMAScript中所有函数的参数都是按值传递的

    ECMAScript中所有函数的参数都是按值传递的.也就是说把函数外部的值复制给函数内部的参数(内部参数的值的修改不影响实参的值). 基本类型变量的复制: 基本类型变量的复制,仅仅是值复制,num1和 ...

  2. gets_s()函数的参数太少,strcpy_s():形参和实参 2 的类型不同,等c函数在Visual Studio上出现的问题, get()函数和scanf()读取字符串的区别,栈的随机性

    首先,这些C函数,在VS上要加_s后缀的原因是,这些函数存在字符串越界等问题,可以参考这篇文章,https://blog.csdn.net/silleyj/article/details/854540 ...

  3. QT学习笔记7:C++函数默认参数

    C++中允许为函数提供默认参数,又名缺省参数. 使用默认参数时的注意事项: ① 有函数声明(原型)时,默认参数可以放在函数声明或者定义中,但只能放在二者之一.建议放在函数声明中. double sqr ...

  4. Redis源码笔记--服务器日志和函数可变参数处理server.c

    前言 Redis源码中定义了几个和日志相关的函数,用于将不同级别的信息打印到不同的位置(日志文件或标准输出,取决于配置文件的设置),这些函数的定义位于 server.h 和server.c 文件中,包 ...

  5. Lua学习笔记3. 函数可变参数和运算符、转义字符串、数组

    1. Lua函数可以接受变长数目的参数,和C语言类似,在函数的参数列表中使用(...)表示函数可以接受变长参数 lua函数将参数存放在一个table中,例如arg,那么#arg可以获得参数的个数 fu ...

  6. 剑指offer笔记面试题1----赋值运算符函数

    题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString{ public: CMyString(char* pData = nullptr); CMyS ...

  7. JS笔记 运算符 函数

    1.运算符 1.位运算符 将数字转换为二进制后进行运算 只做整数运算,如果是小数的话,则去掉小数位再运算 2.位运算 1.按位 与:& 语法:a&b; 2.按位 或| 语法:a|b 任 ...

  8. Python学习笔记五,函数及其参数

    在Python中如何自定义函数:其格式为 def 函数名(函数参数): 内容

  9. python学习笔记之函数的参数

    函数的参数有位置参数和关键字参数,位置参数一定要在关键字参数的前面,位置参数的优先级是高于关键字参数的,否则会报错 def my_abs(a,b): print(a) print(b) my_abs( ...

随机推荐

  1. Java中HashMap的hash分布策略的简单解释

    趴源码是看到一段不可思议的代码,网上的解释似乎不大令人满意,因此稍微花点时间解读了一下,如有错误请指正 HashMap的桶是这样搞的 // 片段1 static final int hash(Obje ...

  2. [转] org.scalatest.FunSuite Scala Examples - Scala FunSuite 测试的例子

    [From]  https://www.programcreek.com/scala/org.scalatest.FunSuite org.scalatest.FunSuite Scala Examp ...

  3. Q64 最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5,1], ...

  4. Cinderella

    Chapter 1 Ella, Ella, CinderellaThere is a beauiful girl. Her name is Ella.She lives with a wicked s ...

  5. redis的key

    Redis支持的数据模型: Redis支持的数据类型: redis的key: Redis对key的操作: 执行命令cd  /usr/local/redis进入到redis的启动目录,执行./redis ...

  6. python爬虫的教程

    来源:http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一 ...

  7. 关于禁止html缓存

    在现代的浏览器里,为了增强用户体验,浏览器一般都会把网页上所需的静态文件缓存到本地,再次刷新的时候则无需再重新加载,但是我们有时候就是不需要浏览器缓存这些文件,而是每次都从服务器端读取数据,可以用以下 ...

  8. java值传递与引用传递

    看代码: import java.lang.reflect.Field; public class Test { public static void main(String[] args) { In ...

  9. 使用VNC访问Linux桌面

    在一个严重依赖Windows的工作环境中,比如电子邮件被限定为Outlook(因为加密要求), VPN软件不支持Linux版本,那么,只使用Linux桌面是不够的,还需要在Linux桌面上跑个虚拟机运 ...

  10. [PY3]——函数——函数注解 | 实现类型检查功能

    函数注解(Function Annotations)——> 可以在定义函数的时候对参数和返回值添加注解 写函数注解 #平时我们使用help()可以查看一个函数的说明,我们自己写的函数也可以提供这 ...