1.类定义输入运算符 >> 时候,代码最后应该检测 输入流是否为有效,如果无效,应该把输入对象置于默认初始化状态。

定义>>时候,类必须是非常量引用。定义<<,最好是常量引用。

定义的时候不能加friend.

2.关于日期输入的正确格式:

Date & Date::operator=(const string &date)
{
istringstream is(date);
char ch1,ch2;
is >> year >> ch1 >> month >> ch2 >> day;
if(!is || ch1 != '-' || ch2 != '-' )throw invalid_argument("Bad date");
if(month < 1 || month > 12 || day < 1 || day > 21)throw invalid_argument("Bad date");
return *this;
}

3.

#include <string>
#include <iostream>
using namespace std;
class Test
{int &fun()const{return a;}private:int a;};
int main()
{
Test t1;return 0;
}
binding reference of type ‘int&’ to ‘const int’ discards qualifiers

const成员函数不能返回类成员的非常量引用。因为有修改类成员的风险。

3.

g++报错"undefined reference to `vtable for XXX' "的原因
原因就一个:没有全部实现XXX基类的纯虚函数.

4.

// items定义成一个multiset,可以将同一本书的多条交易信息保存到一个multiset中,
// 这里不能用圆括号,因为default member initializer来初始化成员有2
// 个方法,list initialization,即一对花括号.第二种是copy initializa//tion,即 等号.如果尝试用圆括号,编译器会误以为是函数声明,所以/报告compare is not a type..
        multiset<shared_ptr<Quote>,decltype(compare)*> items{compare};

所以这里给items初始化有不能使用圆括号。

5.

MoveBase_cmd_vel_sub = node_handle.subscribe( "/movebase_cmd_vel", 60, DHRobotBase::moveBase_cmd_vel); // 订阅 topic

在使用这句话时出现这个问题:

 error: invalid use of non-static member function       "/movebase_cmd_vel", 60, DHRobotBase::moveBase_cmd_vel);

折腾了好久终于弄好了:

MoveBase_cmd_vel_sub = node_handle.subscribe("/movebase_cmd_vel", 60, &DHRobotBase::moveBase_cmd_vel,this); // 订阅topic

原因大概是这个:在C++语言中,对于一个由类名加俩冒号再加成员名构成的东西(学名叫“quilified-id”),比如:A::x,只有当x是A类的静态成员的时候,A::x才能表示一个左值。而对于函数类型到函数指针类型的默认转换,只有当函数类型是左值的时候才行

6.关于c、c++的输入输出函数的掌握:

/***********************************************************************************这个读取字符的函数可以把所有的输入字符都归结为' '和非' '两类,减轻输入字符后的处理难度。
*/
char read_char(void)
{
int ch = getchar();
if(ch == '\t' || ch == '\n')return ' ';
return ch;
}

读入单词的一个经典程序,c现代方法上的

/*******************************************************************************
len表示读入的单词的长度,word是字符指针
*******************************************************************************/
void read_word(char * word,int len)
{
int ch,pos = 0;
while((ch = read_char()) == ' ')   //调用read_char()函数比getchar()更方便;
while(ch != ' ' && ch != EOF)  //EOF是文件结束符,表示linux中CTRL+D或者 win中ctrl+z{if(pos < len)word[pos ++] = ch;ch = read_char();   //如果这里读入”空格“或者EOF,那么读入停止}
word[pos] = '\0';   //末尾添加\0
}

自己的c语言太菜了,真是无地自容了。

7.

//本程序只有一个主题:
//对于代码中的某个节点来说,基类的公有成员是否是可访问的,则派生类向基类的转换也是可访问的;反之则不行。
//我自己的语言理解这句话是:对于某个用户来说,如果这个用户能透过派生类看到(或者使用)基类的公有成员,那么这个用户就可以使用从派生类向基类的转换;反之,则不行。
//如果上面的难理解,那我就这样说:某个用户能否使用派生类对象向基类对象的转换,关键是看对这个用户来说,能否通过派生类对象使用基类的共有成员,B b;b.pub_men//(如果能这样使用就对,不能就错);#include <string>
#include <iostream>
using namespace std;
class A
{public:int a= 1;protected:int b = 2;private:int c = 3;};class B:protected A
{
public:
void f()const{A * a;B * b = new B;//下面的这句,能否实现,关键在于这个用户能否通过派生类看到基类的共有成员。//下面这句的用户其实就是派生类本身(A是基类,B是派生类),肯定能看见基类的共有成员了//所以下面的语句是合法的a = b;  //派生类对象到基类对象的转换cout << "B::b" << b->b << endl;delete b;}
};class C:protected B
{public:void f(){cout << "A::b" <<b << endl;}};int main()
{
A * a = new A;
B * b = new B;
//下面这个语句 c=b 是否合理,关键是这个语句的用户能否透过派生类(B类)看见基类(A类)的共有成员,
//答案是否定的,因为B:protected A,这句话说明了,A类的共有成员在B类中成为了protected成员。
//对于普通用户而言,B类protected成员是不可见的。所以下面这句代码汇报错。
//A * c = b;           //使用了派生类对象向基类对象的转换
b->f();delete a;
delete b;return 0;
}

8.自己在做15.9的课后习题15.41时候,把OrQuery的eval求并集的set_intersection的函数中,前两个迭代器,本应该是shared_ptr<set<line_no>>的迭代器,结果带入shared_ptr<vector<string>>的迭代器,结果出现如下看不懂的错误:

a.out  query.cc  quote.h  textquery.cc
r@r:~/coml/c++/15/15.9/ex/15.41$ g++ main.cc query.cc -o 123
In file included from /usr/include/c++/9/algorithm:62,from query.h:38,from query.cc:7:
/usr/include/c++/9/bits/stl_algo.h: In instantiation of ‘_OutputIterator std::__set_intersection(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator, _Compare) [with _InputIterator1 = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _InputIterator2 = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _OutputIterator = std::insert_iterator<std::set<long unsigned int> >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]’:
/usr/include/c++/9/bits/stl_algo.h:5307:48:   required from ‘_OIter std::set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter) [with _IIter1 = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _IIter2 = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _OIter = std::insert_iterator<std::set<long unsigned int> >]’
query.h:425:93:   required from here
/usr/include/c++/9/bits/stl_algo.h:5258:16: error: no match for ‘operator=’ (operand types are ‘std::insert_iterator<std::set<long unsigned int> >’ and ‘std::__cxx11::basic_string<char>’)5258 |      *__result = *__first1;|      ~~~~~~~~~~^~~~~~~~~~~
In file included from /usr/include/c++/9/bits/stl_algobase.h:67,from /usr/include/c++/9/bits/char_traits.h:39,from /usr/include/c++/9/string:40,from query.cc:1:
/usr/include/c++/9/bits/stl_iterator.h:716:7: note: candidate: ‘std::insert_iterator<_Container>& std::insert_iterator<_Container>::operator=(const typename _Container::value_type&) [with _Container = std::set<long unsigned int>; typename _Container::value_type = long unsigned int]’716 |       operator=(const typename _Container::value_type& __value)|       ^~~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:716:56: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_string<char>’ to ‘const value_type&’ {aka ‘const long unsigned int&’}716 |       operator=(const typename _Container::value_type& __value)|                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:724:7: note: candidate: ‘std::insert_iterator<_Container>& std::insert_iterator<_Container>::operator=(typename _Container::value_type&&) [with _Container = std::set<long unsigned int>; typename _Container::value_type = long unsigned int]’724 |       operator=(typename _Container::value_type&& __value)|       ^~~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:724:51: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_string<char>’ to ‘std::set<long unsigned int>::value_type&&’ {aka ‘long unsigned int&&’}724 |       operator=(typename _Container::value_type&& __value)|                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:665:11: note: candidate: ‘constexpr std::insert_iterator<std::set<long unsigned int> >& std::insert_iterator<std::set<long unsigned int> >::operator=(const std::insert_iterator<std::set<long unsigned int> >&)’665 |     class insert_iterator|           ^~~~~~~~~~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:665:11: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_string<char>’ to ‘const std::insert_iterator<std::set<long unsigned int> >&’
/usr/include/c++/9/bits/stl_iterator.h:665:11: note: candidate: ‘constexpr std::insert_iterator<std::set<long unsigned int> >& std::insert_iterator<std::set<long unsigned int> >::operator=(std::insert_iterator<std::set<long unsigned int> >&&)’
/usr/include/c++/9/bits/stl_iterator.h:665:11: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_string<char>’ to ‘std::insert_iterator<std::set<long unsigned int> >&&’

个人c++ 错误记录相关推荐

  1. php输出mysql错误日志_PHP_PHP中把错误日志保存在系统日志中(Windows系统),【将错误记录到系统日志中】 - phpStudy...

    PHP中把错误日志保存在系统日志中(Windows系统) [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: error_log = syslog 或者在运行时使用 i ...

  2. 【错误记录】Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. ② | 升级 Gradle 版本 )

    文章目录 一.报错信息 二.解决方案 解决 Could not determine java version from '11.0.8'. 问题 , 有两种方案 , 方案一 : Android Stu ...

  3. 【错误记录】VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ② | 删除交换空间 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 [错误记录]VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ) 博客中 , 给出了解决方案 ...

  4. 【错误记录】Ubuntu 修改 hosts 文件 ( 使用 gedit /etc/hosts 命令打开并修改 hosts 文件 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 参考 [错误记录]git clone 报错 ( fatal: unable to access 'https-':gnutls_handshake( ...

  5. 【错误记录】未安装该应用 ( 在 Android 12 之后 组件设置 android:exported=“false“ 属性 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 报错信息 : 点击应用图标后 , 应用并未启动 , 并弹出 " 未安装该应用 " 提示信息 ; 二.解决方案 排查了一下相关地方 ...

  6. 【错误记录】GitHub 网站和仓库无法访问 ( 域名重定向 | 检查 C:\Windows\System32\drivers\etc\hosts 配置文件中的 GitHub 地址域名配置 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在家里的电脑中 , 出现 无法访问 GitHub 网站 , 使用任何手段都无法访问 GitHub ; 二.解决方案 家里的电脑比较乱 , 使用了各种 ...

  7. 【错误记录】IntelliJ IDEA 编译 Groovy 报错 ( GroovyRuntimeException: This script or class could not be run. )

    文章目录 一.错误记录 二.问题分析 一.错误记录 运行 class Student1 {} Groovy 代码 , 会报错 ; 报错信息 : groovy.lang.GroovyRuntimeExc ...

  8. 【错误记录】GitHub 提交报错 ( OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 GitHub 提交报错 : 16:37:19.781: [ClassLoader_Demo] git -c credential.helper= - ...

  9. 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )

    文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...

  10. 【错误记录】Visual Studio 中配置 NDK 头文件路径 ( NDK 的三个头文件路径 | 与 CPU 架构相关 asm 头文件路径选择 )

    文章目录 一.报错信息 二.解决方案 1.NDK 的三个头文件路径 2.与 CPU 架构相关 asm 头文件路径选择 一.报错信息 参考 [Android 逆向]Android 进程注入工具开发 ( ...

最新文章

  1. 球面贴图,立方体贴图的比较
  2. Sublime text3中配置Github
  3. LQ训练营(C++)学习笔记_栈与递归
  4. 《团队激励与沟通》第 4 讲——有效沟通与沟通的障碍 重点部分总结
  5. 顺序图组合片段类型及属性
  6. 剑指offer——面试题46:求1+2+...+n
  7. Carbon Copy Cloner for Mac(磁盘克隆/同步/备份工具)直装版
  8. Flink 如何读取和写入 Clickhouse?
  9. paip.提升用户体验---提取FLASH中图片
  10. 弯管机编程软件电脑版_乐高Wedo2.0电脑版下载
  11. vs应用程序无法正常启动
  12. DFS cdoevs 3100 蜗牛
  13. 《OpenGL编程指南(原书第9版)》——2.8 SPIR-V
  14. Guarded Suspension 设计模式
  15. 先行一步,7 大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了
  16. Vulnhub靶场篇:SkyDogConCTF2016
  17. socket 是用什么网络协议
  18. [日常] NOIWC2019 冬眠记
  19. 163企业邮箱注册申请后怎么使用
  20. 洛谷 AT2442 フェーン現象 (Foehn Phenomena)

热门文章

  1. Unreal Engine 4 —— 冷却UI的制作
  2. 快速构建Windows 8风格应用22-MessageDialog
  3. 二次修改:【练习题】构造方法的重载:Vehicles(交通工具)-Car(小汽车)和Truck(卡车)类继承于Vehicles类
  4. 操作系统实验报告16:CPU 调度
  5. selenium 状态码521_sqlmap对状态码404处理的bug
  6. iOS之深入解析App启动dyld加载流程的底层原理
  7. Swift之本地国际化与App内切换语言
  8. 带你搞明白什么是缓存穿透、缓存击穿、缓存雪崩
  9. 【STM32】随机数发生器详解
  10. 【Linux】一步一步学Linux——tcpdump命令(185)