有人可以帮我解决我的c ++代码问题

时间:2016-04-28 15:40:56

标签: c++

您好我是c ​​++的新手,我想将我的代码从pascal转换为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);

}

这是正确的功能是pascal如果有人需要它理解:

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 [l] = p在li下有这个错误:表达式必须有整数或未整合的枚举类型而且= =我有这个错误:int类型的值不能被赋值到int *

类型的实体

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

2 个答案:

答案 0 :(得分:1)

您使用局部变量l对参数l进行着色。仅使用int l = 0;替换*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);
}

答案 1 :(得分:1)

此:

var ali = {
  firstname: 'ali',
  say_hi: function(firstname) {
    alert("Greetings " + firstname + ", you are talking to " + ali.firstname + "!");
  }
};
var some_ref = ali.say_hi;
some_ref("Sabir");

是int的指针数组,需要int数组。因此,当您尝试分配int *t[] 时,您将t[l]=p分配给int,从而导致错误。  对于int *,你需要引用,而不是指针,所以你的代码可能是这样的:

l