0

次のように、C++STLからマップを実装しようとしています。

#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;
};
4

1 に答える 1

3

これ:

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

は関数ローカル変数であり、メンバー変数ではありません。これは、たとえば、おそらくメンバー変数であるsymbolTable、でアクセスしているものと同じではありません。クラス本体は表示されていませんが、定義が異なっていると思います。getAddress

于 2012-05-22T23:15:43.547 に答える