gpt4 book ai didi

c++ - 错误C2420:第一个操作数中的符号无效

转载 作者:行者123 更新时间:2023-12-02 09:49:35 27 4
gpt4 key购买 nike

我有此代码,我正在使用Visual Studio2019。编译器给出错误:
错误C2420'较少':第一个操作数中的非法符号

#include <iostream>
using namespace std;
int a, b, c, d, x;
int values[5]; // масив для збереження у(х)
void main() {
a = -6; b = 4; c = 8; d = 2;
__asm {
mov eax, offset values
push eax
mov cx, 5
start:
mov ax, 3
sub ax, cx
cwde
mov ebx, eax
mov eax, a
cmp ebx, 1
jl less // if х < 1, go to less
je equals //if х == 1, go to equals

// if х > 1:

imul eax // a^2
sub eax, ebx // a^2-x
cdq
mov ebx, c
idiv ebx // (a^2-x)/c
jmp result

less :
mov edx, 2
imul edx // a*2
imul ebx // a*2*x
add eax, 5 // a*2*x+5
jmp result
equals :
mov ebx, b
sub eax, ebx // a-b
cdq
mov ebx, d
idiv ebx // (a-b)/d
jmp result
result :
pop ebx
mov[ebx], eax
add ebx, 4
push ebx
loop start
}
for (int i = 0; i < 5; i++) {
cout << values[i] << endl;
}
system("pause");
}

由于此行,编译器给出错误:
jl less

没有它,代码将起作用。但是我需要这条线,如何解决呢?

最佳答案

您已通过以下行将整个std命名空间包含在本地命名空间中:

using namespace std;

问题是 std命名空间包括用于比较的函数对象(类模板) std::less std::greater_equal 等。

由于 std::less已被拉入本地 namespace ,因此您使用的MSVC内联汇编代码感到困惑,因为它认为您尝试将 jmpless命名空间映射到标签 std,而不是内联汇编代码中的标签 less

正确的解决方法是 删除这一行:
using namespace std;

包括整个 std命名空间是一个坏习惯。删除上面的行将需要更改此行:
cout << values[i] << endl;

至:
std::cout << values[i] << std::endl;

或者,您可以将 using namespace std;替换为:
using std::cout;
using std::endl;

这只会将这两项包括在本地 namespace 中。

关于c++ - 错误C2420:第一个操作数中的符号无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61321330/

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