当前位置: 首页 > 知识库问答 >
问题:

丢弃限定符访问类中地图的向量时出错?

禄俊逸
2023-03-14

我有一个定义如下的类。h:

#ifndef C1_H
#define C1_H

#include <iostream>
#include <map>
#include <string>
#include <vector>

class C1{
        private:
                std::map<std::string, std::vector<int>> cmap;
        public:
                C1();
                ~C1();
                friend std::ostream& operator<< (std::ostream& os, const C1& c);
};

#endif

输出流函数有问题。在cpp文件中,我将其定义为:

ostream& operator<< (ostream& os, const C1& c) {
        vector<string> strlist= //a vector of the strings associated in the map;
        cout << *(strlist.begin()+3) << endl; //this was for testing where the error was
        for (int j = 0; j < 9; j++) {
                int size = c.cmap[*(strlist.begin() + j)].size();
                for (int k = 0; k < size; k++) {
                        os << (c.cmap[*(strlist.begin()+j)]].[begin()+k])<<endl;
                }
        }
        return os;
}

下面是std'const错误:,

错误:传递“const std::map,std::vector”

当我从ostream操作符重载的定义中删除const保护时,这个编译很好,但是,我相信我应该能够使用const保护来完成它,根据我的老师的说法,现在养成这个习惯是更好的做法。有谁能给我指点一下为什么这本书不能编译?

不过,由于ostream是一个friend类,我可以访问私有成员(像往常一样,我对大多数操作符使用相同的基本结构)

共有1个答案

淳于博
2023-03-14

在:

int size = c.cmap[*(strlist.begin() + j)].size();

你应该写:

int size = c.cmap.at(*(strlist.begin() + j)).size();

相反

您正在通过c作为const C1

std::map对于操作符[]没有const重载,因为如果键不存在,操作符[]将执行插入操作。这是为了使以下语句:

std::map<std::string, int> map;
map["test"] = 1;

工作

 类似资料:
  • 我不明白资格赛在哪里/为什么会被淘汰。 我在c()上得到一个编译器错误;生产线: 错误:传递“const std::\u Bind(A) 解决方法我不明白: > 将A::f()定义为const:void f()const{}; 对实例的引用:调用者(std::bind( 通过以下方式传递到lambda:自动l=[ g版本:

  • 我有一个类缓存,它的函数write指定为 我这样调用这个函数。 上面的一行给了我以下错误 将“const Cache”作为“bool Cache::write(const MemoryAccess)”的“this”参数传递 this参数是特定于编译器的,它有助于代码混乱和中断本地命名空间变量优先级。但这样的变量并没有在这里传递。

  • 在将Android Studio更新到北极狐和Android Gradle插件更新到7.0.0后,我面临着这个警告,我的意思是应用程序可以成功地构建这个警告,但我在这里遗漏了什么?这里有什么问题? 根据官方的视图绑定引用,我正在以正确的方式启用它。这是我的建筑。如果有人有兴趣检查。 有一些相关的问题,但我认为它们在这种情况下并不相关。 build.gradle:对“项目”的访问超出了其访问权限 启

  • 以下代码在Green Hills C编译器中导致错误(错误:类型int*与参数类型const int*不兼容),而它只产生警告并使用gcc进行编译(警告:传递func的参数1会从指针目标类型中丢弃const限定符)。 哪些行为符合C标准?

  • 错误:将“const A”作为“void A::hi()”的“this”参数传递会丢弃限定符[-fppermissive] 我不明白为什么会出现这个错误,我没有返回任何东西,只是传递了对象的引用,就是这样。 编辑 我用const correction修复了它,但是现在我试图在同一个方法中调用方法,我得到了同样的错误,但奇怪的是我没有传递这个方法的引用。 错误:将“const A”作为“void A

  • 我有与这里、这里或这里相同的问题,除了我为参数和函数设置了const: 但我有同样的编译错误: