2016-04-28 46 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); 
} 
相關問題