0

StatementStateFunction [ ] 是一个函数数组,它们都返回 StatementState 和 StateArray [GetInputToken(T)] [CurrentState] 是一个状态表,它告诉 StatementStateFunction [ ] 要调用哪个函数,但是编译器说它不能将 StatementFunc 分配给 StatementState 即使StatementStateFunction[] 中调用的方法都返回一个 StatementState

在 StatementTable.cpp 中

void StatementTable::BuildStatement (Token & T)
{
  StatementState CurrentState (StartStatement);
  do
  {
    CurrentState = StatementStateFunction [ StateArray[GetInputToken(T)][CurrentState] ];
  } 
  while (CurrentState != StatementComplete);
}

在 StatementTable.h 中

typedef StatementState          (*StatementFunc)    (Token &);

static  Token::UChar        StateArray [NumTokeInputs] [NumberStates]; 
static  StatementFunc       StatementStateFunction  [];
4

1 回答 1

0

让我们分析一下这个表达式:

CurrentState = StatementStateFunction [ StateArray[GetInputToken(T)][CurrentState] ];

您在这里有三个数组 indizes,GetInputToken(T), CurrentState, StateArray[x][y]. 数组 indizes 必须是整数(intshortcharlong)。

  • GetInputToken似乎是一个功能。从您的来源我无法判断它是否返回整数类型。
  • CurrentState是类型StatementState。目前尚不清楚该类型是什么,但如果它不是整数类型,也没有隐式转换为这种类型,则不能用作数组索引。
  • StateArray[x][y]是类型Token::UChar。Thyt 应该没问题,UChar看起来像整数类型的 typedef。

表达式的剩余部分是赋值。它有形式CurrentState = StatementStateFunction[x]StatementStateFunction[x]是一个StatementFunc,即一个函数指针。CurrentState是类型StatementState您不能将该函数指针分配给 aStatementState,至少错误消息是这样说的。

我假设您想调用该函数,可能会将 Token 作为参数提供给BuildStatement. 代码变得更具可读性,如下所示:

void StatementTable::BuildStatement (Token & T)
{
  StatementState CurrentState = StartStatement;
  do
  {
    auto tokenIndex = GetInputToken(T);
    auto funcIndex = StateArray[tokenIndex][CurrentState];

    auto function = StatementStateFunction[funcIndex];
    //this is what was missing: the function call
    CurrentState = function(T);
  } 
  while (CurrentState != StatementComplete);
} 
于 2013-05-15T06:49:33.277 回答