日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

error: passing ‘const xxx’ as ‘this’ argument discards qualifiers c++primer 5th文本查询程序一个错误请各位指教(已解决)

發布時間:2024/4/18 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 error: passing ‘const xxx’ as ‘this’ argument discards qualifiers c++primer 5th文本查询程序一个错误请各位指教(已解决) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件main.cc

文件main.cc?

#include <string> #include <iostream> #include <memory> #include <vector> #include <set> #include <map> #include <fstream> #include "resultquery.h" #include "textquery.h" using namespace std; int main(int number,char**para) { ifstream in_f(para[1]); runQueries(in_f); return 0; }

文件functions.cc

#include <string> #include <iostream> #include <memory> #include <vector> #include <set> #include <map> #include "resultquery.h" #include "textquery.h" #include <sstream> #include <fstream> using namespace std; TextQuery::TextQuery(ifstream &in):file(new vector<string>()){ string line; size_t line_no = 0;while(getline(in,line)){file->push_back(line);string word;istringstream is(line);while(is >> word){if(!str_lines[word])str_lines[word] = make_shared<set<size_t>>();str_lines[word]->insert(line_no);}line_no ++; } } ResultQuery TextQuery::query(const string &s)const{ static shared_ptr<set<size_t>> nodata(new set<size_t>()); if(str_lines.find(s) == str_lines.end()) {return ResultQuery(file,nodata,s); } else {//錯誤點已經找到: //把這個塊內的代碼改成下面的格式就正確了,為啥??? // map<string,shared_ptr<set<size_t>>>::const_iterator pos = str_lines.find(s); // return ResultQuery(file,pos->second,s);return ResultQuery(file,str_lines[s],s); //現在的函數是const的,所以這個成員也變成了const的str_lines為啥? //成員函數是const的,那么會導致調用這個成員函數的所有成員不可改變,就說每個成員都是const的了 //所以就不能用下標運算了,map的下標運算只適合非const的map對象}}ResultQuery::ResultQuery():file(new vector<string>),lines(new set<size_t>){} ResultQuery::ResultQuery(shared_ptr<vector<string>> f,shared_ptr<set<size_t>> l,const string &w):file(f),lines(l),word(w){}set<size_t>::iterator ResultQuery::begin(){return lines->begin(); } set<size_t>::iterator ResultQuery::end(){return lines->end(); } shared_ptr<vector<string>> ResultQuery::get_file(){return file;}void runQueries(ifstream &in){ TextQuery t(in); string word; cout << "enter a word you want to find(q to end):" << endl; cin >> word; print(cout,t.query(word)); }ostream& print(ostream &os,const ResultQuery &qr) { os << qr.word << " occurs " << qr.lines->size() << " times:" << endl; for(auto &i : *qr.lines){cout << "(line " << i+1 << " )" << (*qr.file)[i] << endl;} return os; }

文件testquery.h

#ifndef TEXTQUERY_H #define TEXTQUERY_H#include <string> #include <iostream> #include <memory> #include <vector> #include <set> #include <map> #include "resultquery.h" using namespace std; class ResultQuery; class TextQuery{public:TextQuery():file(make_shared<vector<string>>()){}TextQuery(ifstream &);ResultQuery query(const string &)const;private:shared_ptr<vector<string>> file;map<string,shared_ptr<set<size_t>>> str_lines;};void runQueries(ifstream &);#endif

文件resultquery.h?

#ifndef RESULTQUERY_H #define RESULTQUERY_H #include <string> #include <iostream> #include <memory> #include <vector> #include <set> #include <map> using namespace std; class ResultQuery{friend ostream& print(ostream &,const ResultQuery &qr);public:ResultQuery();ResultQuery(shared_ptr<vector<string>> f,shared_ptr<set<size_t>> l,const string &w);shared_ptr<vector<string>> get_file();set<size_t>::iteratorbegin();set<size_t>::iteratorend();private:shared_ptr<vector<string>> file;shared_ptr<set<size_t>> lines;string word;}; ostream & print(ostream &,const ResultQuery &qr);#endif

?在ubuntu20.04中執行編譯:

g++ main.cc functions.cc -o 123

結果如下:

functions.cc: In member function ‘ResultQuery TextQuery::query(const string&) const’: functions.cc:38:43: error: passing ‘const std::map<std::__cxx11::basic_string<char>, std::shared_ptr<std::set<long unsigned int> > >’ as ‘this’ argument discards qualifiers [-fpermissive]38 | return ResultQuery(file,str_lines[s],s);| ^ In file included from /usr/include/c++/9/map:61,from functions.cc:6: /usr/include/c++/9/bits/stl_map.h:490:7: note: in call to ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string<char>; _Tp = std::shared_ptr<std::set<long unsigned int> >; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, std::shared_ptr<std::set<long unsigned int> > > >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = std::shared_ptr<std::set<long unsigned int> >; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = std::__cxx11::basic_string<char>]’490 | operator[](const key_type& __k)

為啥錯誤?

代碼中的分析得到如下結論:

const成員函數的所有成員不可改變,就是說const成員函數把調用它的對象所有成員都const化了(即使原來不是const的成員,現在都不可改變就變成const的了)。如下:

//test.cc

class T{public:int *ptr()const{return &a;}private:int a;int b;};

編譯后錯誤如下:

test.cc: In member function ‘int* T::ptr() const’: test.cc:11:26: error: invalid conversion from ‘const int*’ to ‘int*’ [-fpermissive]11 | int *ptr()const{return &a;}| ^~| || const int*

也就是說現在成員函數中的a就是const的了,即使原來的類中不是const的。所以返回值&a就是const int*類型?,當然不能轉化成int *。

? ? ? ? 到此,開始代碼中文件functions.cc中的錯誤就非常好理解了,const成員函數query中所有的數據成員都const化了,所以str_lines也是const的了,所以它的元素的指針當然是const的(find成員函數的到的指針也是const的),所以導致錯誤。所以const map對象不能用下標操作,但是可以用指針操作來訪問值

?

總結

以上是生活随笔為你收集整理的error: passing ‘const xxx’ as ‘this’ argument discards qualifiers c++primer 5th文本查询程序一个错误请各位指教(已解决)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩精品视 | 性网| 欧美精品一区二区视频 | 亚洲成人黄色小说 | 三级电影在线看 | 爽妇网av | 三级av在线免费观看 | 九热在线视频 | 亚洲免费在线观看 | 僵尸叔叔在线观看国语高清免费观看 | 激情综合网五月 | ts人妖在线观看 | 久草视频在线免费看 | 亚洲区视频 | 成人黄色性视频 | 国产精品正在播放 | 国产福利免费观看 | 小视频国产 | 欧美日韩一卡二卡三卡 | 日韩av一二三区 | 久久久久亚洲精品系列色欲 | 无码人妻精品一区二区中文 | 免费观看日韩av | 久久日韩 | 日本中文字幕免费观看 | 女女综合网 | 国产精品久久久久久亚洲毛片 | 国产欧美精品在线 | 亚洲午夜在线 | 成人黄色片视频 | 美女伦理水蜜桃4 | 欧美国产激情 | av福利网 | 中文第一页 | 麻豆高清视频 | 伊人情人综合网 | 日韩人妻一区二区三区蜜桃 | 午夜偷拍视频 | 特级av| 91性高潮久久久久久久 | 蜜臀久久精品久久久久久酒店 | 欧美人与禽zozzo性之恋的特点 | 一区二区自拍 | 国产伦精品一区二区三区四区视频 | 亚洲国产v | 亚洲乱码国产乱码精品天美传媒 | 69精品丰满人妻无码视频a片 | 日韩成人av网站 | 亚洲天堂五月天 | 日本高清二区 | 国内精品视频一区 | 91麻豆一区二区 | av免费看片| 亚洲激情在线观看 | 亚欧色视频 | 亚洲欧美中文字幕 | 亚洲视频成人 | 在线视频导航 | 国产一级片在线播放 | 男生和女生一起差差差很痛的视频 | 日韩欧美国产综合 | 无码h黄肉3d动漫在线观看 | 777久久 | 91狠狠综合 | 91国产大片 | 欧美国产一区二区在线观看 | 天堂在线精品视频 | 性欧美视频在线观看 | 91视频专区 | 天天插插 | 亚洲天堂网在线观看视频 | 久久久久久艹 | 成人国产免费观看 | 亚洲国产精品午夜久久久 | 91蜜臀精品国产自偷在线 | 91女神在线| 91网址在线| 777午夜| 国产一区二区在线精品 | 日日摸天天爽天天爽视频 | 欧美一区二区三区粗大 | 亚洲怡红院av | 99视频免费看 | 久久精品99久久久久久 | 粗暴video蹂躏hd| 91亚洲国产成人久久精品网站 | 午夜婷婷| 美女被男人c| 91黄色片 | 已满十八岁免费观看全集动漫 | 黄色a免费| 亚洲成av人片在线观看无码 | 毛片网站免费 | 啪网站| 欧美一级看片 | 欧美色图13p | 孕妇毛片 | 免费一区 | 丰满人妻熟妇乱偷人无码 |