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 [];
答案 0 :(得分:0)
让我们分析一下这个表达式:
CurrentState = StatementStateFunction [ StateArray[GetInputToken(T)][CurrentState] ];
这里有三个数组indizes,GetInputToken(T), CurrentState, StateArray[x][y]
。数组indizes必须是整数(int
,short
,char
,long
等。
GetInputToken
似乎是一个功能。从你的来源我无法判断它是否返回一个整数类型。CurrentState
的类型为StatementState
。目前尚不清楚该类型是什么,但如果它不是整数类型,也没有隐式转换为这种类型,则不能用作数组索引。StateArray[x][y]
的类型为Token::UChar
。你应该没问题,UChar
看起来像一个整数类型的typedef。表达的剩余部分是作业。它的格式为CurrentState = StatementStateFunction[x]
。 StatementStateFunction[x]
是StatementFunc
,即函数指针。 CurrentState
的类型为StatementState
。 您无法将该函数指针指定给StatementState
,至少这是错误消息所说的内容。
我假设您想调用该函数,可能将令牌作为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);
}