2016-04-28 52 views
-1

你好,我是在C新++,我想我的代码从帕斯卡到C转换++,所以这是我的尝试:有人能帮助我解决我的C++代码

void decomp(int x, int *t[], int *l){ 
int p = 2; 
int l = 0; 

do{ 
if (x % p == 0){ 
x = x/p; 
t[l] = p; 
l += 1;  
} 
else { p += 1; } 
} while (x != 1); 

} 

,这是正确的功能是帕斯卡如果有人需要它理解:

procedure decomp(x:integer; var t : tab; var l : integer); 
var 
p : integer; 
begin 
l : = 0; 
p: = 2; 
repeat 
if (x mod p = 0) then 
begin 
x : = x div p; 
l: = l + 1; 
t[l]: = p; 
end 
else 
p: = p + 1; 
until(x = 1); 
end; 

问题已编译器给我一个错误消息:T [1] = p的作用下立有这样的错误:表达式必须具有整数或无作用域枚举类型和下=我有此错误:int类型的值不能分配给int类型的实体*

PS函数需要返回一个数组和他的大小(var t:tab; var l:integer)

+1

不能使用具有相同名称作为这样函数参数的局部变量。 – MikeCAT

+1

而且?你的问题是什么?你的问题是什么? – NathanOliver

+0

问题是编译器给了我一个错误消息:t [l] = p在li下有这个错误:表达式必须有整型或unscoped枚举类型,并且在下=我有这个错误:int类型的值不能被赋值给int * – gymn

回答

1

此:

int *t[] 

是一个指针为int数组,你需要为int数组。因此,当您尝试分配t[l]=p时,您将int指定为int *,因此发生错误。 和l你需要引用,而不是指针,所以你的代码可能是这样的:

void decomp(int x, int t[], int &l){ 
    int p = 2; 
    l = 0; 

    do{ 
     if (x % p == 0){ 
      x /= p; 
      t[l++] = p; 
     } 
     else { ++p; } 
    } while (x != 1); 
} 
1

您使用局部变量l遮蔽参数l。用*l = 0;代替int l = 0;。无论您使用何地,您都必须取消l

更好的是,通过引用而不是指针传递l。这将更类似于Pascal代码中的var l: integer

void decomp(int x, int *t[], int &l) 

然后,您不必取消引用l作为指针到处。

另外,t是一个指针数组。你正试图给一个指针赋一个整数。我不确定如何用你的代码解决这个问题。也许它并不需要是一个指针数组:

void decomp(int x, int t[], int &l) 
{ 
    int p = 2; 
    l = 0; 

    do 
    { 
     if (x % p == 0) 
     { 
      x = x/p; 
      t[l] = p; 
      l += 1; 
     } 
     else 
     { 
      p += 1; 
     } 
    } while (x != 1); 
} 
相关问题