错误C2420:第一个操作数中有非法符号



我有这段代码,我使用的是Visual Studio 2019。编译器给出错误:错误C2420"less":第一个操作数中存在非法符号

#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::lessstd::greater_equal等。

由于std::less已被拉入本地命名空间,您使用的MSVC内联程序集代码会感到困惑,因为它认为您正在尝试从std命名空间将jmpless标签,而不是内联程序集码中的less标签。

正确的修复方法是删除此行:

using namespace std;

包含整个std名称空间是不好的做法。删除上面的行需要更改此行:

cout << values[i] << endl;

至:

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

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

using std::cout;
using std::endl;

这将只将这两个项目包括在本地名称空间中。

我修复了它,我需要减少对其他名称的更改(例如less1(

相关内容

  • 没有找到相关文章

最新更新