gpt4 book ai didi

C: switch 中需要整数表达式而不是 XY

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:43 26 4
gpt4 key购买 nike

我在开关和结构方面有一个小问题。

我有所有指令的枚举。这重新存储在 Instr 结构中(节点地址上有 3 个指针-作为三个地址代码)

typedef enum {
// BUILT-IN FUNCTIONS
insIfj16readInt,
insIfj16readDouble,
insIfj16readString,
insIfj16lenght,
insIfj16substr,
insIfj16compare,
insIfj16find,
insIfj16sort,
insIfj16print,
//
// MATH
insPlus,
insMinus,
insMux,
insDiv,
//
//COMPARE
insEqual,
insNotEqual,
insLess,
insLessOrEqual,
insGreater,
insGreaterOrEqual,
insAssignment,
insFunctionCall
}InstrType;

typedef struct Instr {
BTSNode *Id1;
BTSNode *Id2;
BTSNode *Id3;
InstrType *type;
}Instr;

但是现在,编译器开始提示 switch 值。

切换代码是这样的:

instrStack *instrStack;
// Pointer on instruction
struct Instr *instruction;
// Taking the first instruction from the instruction stack
instruction = instrStackTop(instrStack);

while(instruction != NULL) {
instruction = instrStackTop(instrStack);

switch (instruction->type) {
// BUILT-IN FUNCTIONS

case insIfj16readInt:
if(instruction->Id3->inc == 1) {
if (instruction->Id3->data.type == var_int) {
instruction->Id3->data.value.intValue = readInt();

} else {
throwException(4,0,0);
}

} else {
throwException(8, 0, 0);
}
break;
case insIfj16readString:

etc. etc. more code and so one.

所以这是编译器的提示:

"Integer expression is required in switch instead of 'InstrType *'

我真的不知道为什么会这样。我在我的词法分析器上使用带有开关和枚举的相同“系统”(我只是改变自动机的状态),这没有问题。

最佳答案

在您的代码中,instruction->typeInstrType * 类型。您需要多一层取消引用。

有点像

 switch ( *(instruction->type) )

应该完成这项工作。

关于C: switch 中需要整数表达式而不是 XY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40807640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com