从'int'到'int *'的无效转换

时间:2010-01-19 19:24:41

标签: c++

我正在寻找解决LCS问题(最常见的子序列),我试图通过参考维基百科上给出的解释和pascal代码在c ++中创建自己的代码。

我的最终结果是:

#include <iostream>
#include <algorithm>
using namespace std;

int LCS(int a[100], int b[100], int m, int n);

int main()
{
 int n, m, i, k, x[100], y[100];
 cout << "n i m: " << endl;
 cin >> n >> m;
 cout << "n array: " << endl;
 for(i=1;i<=n;i++)
  cin >> x[i];
 cout << "m array: " << endl;
 for(i=1;i<=m;i++)
  cin >> y[i];
 k = LCS(x[100], y[100], m, n);
 cout << k << endl;
 return 0;
}

int LCS(int a[100], int b[100], int m, int n)
{
 int c[m][n], i, j;
 for(i=0;i<=m;i++)
  c[i][0] = 0;
 for(i=0;i<=n;i++)
  c[0][i] = 0;
 for(i=1;i<=m;i++)
 {
  for(j=1;j<=n;j++)
  {
   if(a[i] == b[j])
   {
    c[i][j] = c[i-1][j-1]+1;
   }
   else
    c[i][j] = max(c[i][j-1], c[i-1][j]);
  }
 }
 return c[m][n];
}

我试图通过g ++编译它,我收到了一个错误:

3.cpp: In function 'int main()':
3.cpp:19: error: invalid conversion from 'int' to 'int*'
3.cpp:19: error:   initializing argument 1 of 'int LCS(int*, int*, int, int)'
3.cpp:19: error: invalid conversion from 'int' to 'int*'
3.cpp:19: error:   initializing argument 2 of 'int LCS(int*, int*, int, int)'

我不是真正参与c / c ++编程,我想知道我的错误在哪里,为什么会发生以及如何解决它。谢谢。

9 个答案:

答案 0 :(得分:8)

只需传递数组名称。

LCS(x, y, m, n);

不是这个

LCS(x[100], y[100], m, n);

答案 1 :(得分:5)

k = LCS(x[100], y[100], m, n);更改为k = LCS(x, y, m, n);

答案 2 :(得分:2)

问题在于

k = LCS(x[100], y[100], m, n);

将其更改为

k = LCS(x, y, m, n);

答案 3 :(得分:2)

调用该函数的代码混淆了:

k = LCS(x[100], y[100], m, n);

它在第一个参数中传递x的第101个条目,在第二个参数中传递y的第101个条目。据推测,该函数希望您传递数组的地址,因此它应该是LCS(x, y, m, n)

答案 4 :(得分:1)

k = LCS(x[100], y[100], m, n);更改为k = LCS(x, y, m, n);

答案 5 :(得分:0)

LCS接受100个整数的数组。你传递一个int。这在C ++中无效。顺便说一句,这只是本代码中的众多问题之一。举个例子,这个:

int c[m][n]

在C ++中也无效。

如果您不熟悉某种语言,那么从小代码片段开始逐步构建迭代是一种很好的做法。这是获得理解的一种更好的方式,而不是从另一种语言翻译大量代码,只需交叉手指即可编译和工作。

答案 6 :(得分:0)

 k = LCS(x[100], y[100], m, n);

应该是

 k = LCS(x, y, m, n);

你应该传入一个int数组,但是你传入的是索引为100的int。

我还看到了其他一些错误。

for(i=1...

数组在C / C ++中的索引为0。 for(i = 0 ...

我&lt; = n应该是我

对于输入n和m的用户,您没有对数组的边界进行任何错误检查。如果用户供应150 - 你崩溃了。

答案 7 :(得分:0)

int LCS(int a[100], int b[100], int m, int n)
{
 int c[m][n], i, j;
...

你不能在C / C ++中的堆栈(或任何地方)声明可变长度数组。您需要在堆上分配它们或使用常量长度数组。

答案 8 :(得分:0)

问题的至少一部分是这一行:

int c[m][n], i, j;

您不能使用变量来声明数组的大小。您将需要执行以下操作:

int **c = new int[m][n];

然后在最后,

int ret = c[m][n];
delete [][] c;
return ret;