1

我的问题是为什么processSymbol(const string, enumDataType)编译器认为我正在传递一个 std::string&。我processSymbol(const string, enumDataType)之前在我的代码中使用过并且按预期工作,但是在这个函数中我得到了这个错误

error: call of overloaded 'processSymbol(std::string&, symsErrorCode&)' is ambiguous|
note: candidates are:
note: void processSymbol(std::string, symsErrorCode&)|
note: void processSymbol(std::string, symsErrorCode)|

这是我想知道的功能。

void processSearchForSymbols(ifstream & inSyms, BST & symTable){
   symsErrorCode symsError;
   string symbol;
   while(inSyms >> symbol){
       symsError = NO_ERROR;
       processSymbol(symbol, symsError);
   }
}

processSymbol()我认为应该如何编译的函数是这样的:

void processInsertSymbolData(ifstream & inFile, BST & symTable){
string symbol, value, rFlag, fourCharSymbol;
symsErrorCode symsError;
while(inFile >> symbol >> value >> rFlag){
    symsError = NO_ERROR;
    processSymbol(symbol, symsError);
    if(symsError == NO_ERROR)
    {
        fourCharSymbol = createFourCharSymbol(symbol);
        processValue(value, symsError);
        if(symsError == NO_ERROR)
        {
            processRFlag(rFlag, symsError);
            if(symsError == NO_ERROR)
            {
                insertIntoSymTable(symsError, fourCharSymbol, value, rFlag, symTable);
            }
        }
    }
    errorOutput( symsError, symbol, fourCharSymbol, value);
}
return;
}

这是processSymbol(const string symbol, symsErrorCode symsError)功能

void processSymbol(const string symbol, symsErrorCode symsError){
if(symbol.length() > 10)
{
    symsError = LENGTH;
}
else if(!isalpha(symbol[0]))
{
    symsError = START_CHAR;
}
else
{
    for(unsigned int i = 1; i < symbol.length(); i++)
    {
        if( !isalnum(symbol[i]) && symbol[i] != '_' )
        {
            symsError = INVALID_CHAR;
        }
    }
}
return;
}
4

1 回答 1

1

编译器无法区分您尝试调用的两个 processSymbol 声明。我建议使用指针 (*) 而不是 & 作为枚举。这将使编译器清楚您打算调用哪个版本的函数。

processSymbol(const string symbol, symsErrorCode* symsError) ...
于 2013-09-10T03:56:08.407 回答