C++错误:没有从'mapped_type'到'int'的可行转换

C++ error: no viable conversion from 'mapped_type' to 'int'

本文关键字:int 转换 type 错误 mapped C++      更新时间:2023-10-16

我正在尝试从 C++ STL 实现 a 映射,如下所示:

#include <string>
#include <iostream>
#include <map>
using namespace std;
#include "assembler.h"
// This Class makes use of the Map Template from the Standart Template Library
// All addresses are stored as numerical (Dec) integers
SymbolTable::SymbolTable() { // Constructor
    map <string, int> symbolTable;
    int address = 0;
}
void SymbolTable::addEntry(string symbol, int address) {
symbolTable[symbol] = address;
address++;
}
// Returns true if symbolTable already contains symbol
bool SymbolTable::contains(string symbol) {
    if (symbolTable.find(symbol) == symbolTable.end()) { return true; }
    else { return false; }
}
int SymbolTable::getAddress(string symbol) {
    return symbolTable[symbol];
}

我尝试编译它

c++ *.cpp -0 assembler.out

并且我收到以下错误消息:

symboltable.cpp:57:9: error: no viable conversion from 'mapped_type' (aka 'std::basic_string<char>') to 'int'
    return symbolTable[symbol];
           ^~~~~~~~~~~~~~~~~~~
1 error generated. 

我已经在网上搜索了这个错误,我得到的只是与STL相关的错误报告,我无法弄清楚这些报告是否与我遇到的问题相同,如果是,如何解决它。我做错了什么吗?

我尝试(可能愚蠢地(将违规行键入为

return (int) symbolTable[symbol];

感谢您的任何帮助。

我的头文件将类声明为:

class SymbolTable {
public:
    SymbolTable();
    void addEntry(string, int); 
    bool contains(string);
    int getAddress(string);
private:
    map <string, string> symbolTable;
    int address;
};

这个:

SymbolTable::SymbolTable() { // Constructor
    map <string, int> symbolTable;
                        ^
                        ^

是函数局部变量,而不是成员变量。 它与您正在访问的symbolTable不同,例如 getAddress,大概是一个成员变量。 你还没有显示类主体,但我的猜测是它的定义不同。