2016-04-28 2 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; 

этот вопрос является компилятор дает мне сообщение об ошибке: т [л] = р при Li этой ошибки: выражение должно иметь целостный или незаданный перечислимый тип и при = я быть_наст эта ошибка: значение типа int не может быть присвоено сущности типа int *

PS функция должна возвращать массив и его размер (var t: tab; var l: integer)

+1

Вы не можете использовать локальные переменные, которые имеют одинаковые имена в качестве аргументов функции таким образом. – MikeCAT

+1

И? Какой у Вас вопрос? В чем проблема? – NathanOliver

+0

Проблема заключается в том, что компилятор дает мне сообщение об ошибке: t [l] = p under li имеет эту ошибку: выражение должно иметь интегральный или неперечисленный тип перечисления, а под = i есть эта ошибка: значение типа int не может быть присвоено объект типа int * – gymn

ответ

1

Это:

int *t[] 

является массив указателей на 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. Замените int l = 0; только *l = 0;. Вам придется разыграть l везде, где вы его используете.

Еще не успел пройти l по ссылке, а не указателем. Это будет больше похоже на var l: integer в коде Pascal.

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); 
} 
Смежные вопросы