You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何创建字典(map)及解决mmap does not name a type运行报错

问题排查与C++ map使用说明

报错根因分析

你遇到的mmap does not name a type以及后续运行错误由以下几个语法/逻辑问题共同导致:

  • 类继承语法错误:class vacuum public: environment 是错误写法,正确继承语法是class vacuum : public environment,语法错误会导致编译器解析类定义时逻辑混乱,误把变量识别为类型抛出提示。
  • 变量作用域错误:你在environment类的构造函数内部定义的mymap是局部变量,仅在构造函数执行时有效,构造结束就会被销毁,子类vacuum的print方法根本访问不到这个变量。
  • 访问权限错误:vacuum类的print方法默认是private权限,类外的main函数无法直接调用。
  • 随机数逻辑错误:rand()%1的结果永远是0,无法得到0和1的随机结果,且你没有初始化随机种子,每次运行结果都会固定。
  • 主函数格式不规范:标准C++中main函数的返回值必须是int,而非void。

C++ map(字典)的正确创建方式

map作为字典使用时,根据使用场景有几种常见创建方式:

  1. 局部变量创建:在函数内部声明直接使用
// 声明一个key为char、value为int的字典
map<char, int> mymap;
// 插入方式1:用pair插入
mymap.insert(pair<char, int>('A', 1));
// 插入方式2:用make_pair插入
mymap.insert(make_pair('B', 2));
// 插入方式3:下标赋值
mymap['C'] = 3;
  1. 类成员变量创建:需要把map声明为类的成员属性,而非构造函数内的局部变量,才能在整个类的生命周期生效,子类继承后也能访问(需要声明为public或者protected权限)。

修复后的完整可运行代码

#include<iostream>
#include<ctime>
#include<map>
#include<stdlib.h>
#include <iterator>
using namespace std;
class environment
{
public:
    // 把mymap声明为类的public成员变量
    map<char,int> mymap;
    environment(){
        // 初始化随机种子,保证每次运行随机结果不同
        srand((unsigned int)time(nullptr));
        mymap.insert(pair<char, int>('A', rand()%2));
        mymap.insert(pair<char, int>('B', rand()%2));
    }
};
// 修正继承语法
class vacuum : public environment
{
public:
    // 把print改为public权限方便外部调用
    void print()
    {
        cout<<"printing the conditions of the rooms #0 indicate the room is clean and #1 indicate that the room is dirty "<<endl;
        cout<<"room1:"<<mymap.at('A');
        cout<<endl<<"room2: "<<mymap.at('B')<<endl;
    }
};
int main()
{
    vacuum o;
    o.print();
    return 0;
}

内容的提问来源于stack exchange,提问作者user8574515

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:27:03