Fibonacci C++ - 从“int”到“int*”的无效转换以及“int fibo(int, int*, int*)”的初始化参数 2/3
Fibonacci C++ - invalid conversion from ‘int’ to ‘int*’ and initializing argument 2/3 of ‘int fibo(int, int*, int*)’
你好,我在斐波那契上用 C++ 编写的这个程序有问题,我试图搜索 google 错误,但我没有找到 solution/explanation。
有代码:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
using namespace std;
int fibo(int,int*,int*);
int conta=0;
int main() {
int n,m,f;
int fibN=1;
int fibNMeno1=0;
cout << "Calcolo del numero di Fibonacci di indice n \n \n" << endl;
cout << "Introdurre n (positivo e minore di 47:" << endl;
cin >> n;
n=abs(n/1);
if (n<1) {
fibN=0;
}
else {
fibo(n,fibN,fibNMeno1);
}
cout << "\n Fibonacci di indice " << n << "vale: " << fibN << endl;
cout << "\n numero di chiamate ricorsive: " << conta << "\n\n" << endl;
}
int fibo(int n, int*pfn, int* pfnMeno1) {
int t;
int tFn,tFnMeno1,tF;
conta++;
if (n==1) {
*pfn=1; *pfnMeno1=0; return 1;
}
else {
t=n%2; n=n/2;
fibo(n,pfn,pfnMeno1);
tFn=(*pfn)*(*pfn)+2*(*pfn)*(*pfnMeno1);
tFnMeno1=(*pfn)*(*pfn) + (*pfnMeno1)*(*pfnMeno1);
if(t) {
tF=tFn;
tFn=tFn + tFnMeno1;
tFnMeno1=tF;
}
*pfn=tFn;
*pfnMeno1=tFnMeno1;
return 3;
}
}
哪里出错了?它如何在 C++ 上使用 *?
fibonacci.cpp: In function ‘int main()’:
fibonacci.cpp:23:22: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
fibo(n,fibN,fibNMeno1);
^
fibonacci.cpp:7:5: note: initializing argument 2 of ‘int fibo(int, int*, int*)’
int fibo(int,int*,int*);
^
fibonacci.cpp:23:22: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
fibo(n,fibN,fibNMeno1);
^
fibonacci.cpp:7:5: note: initializing argument 3 of ‘int fibo(int, int*, int*)’
int fibo(int,int*,int*);
fibN/fibNMeno1 具有 int 类型,但您的函数要求。 int * 类型,它是一个指向 int 的指针。
如果您想将 int 作为 int * 传递,您需要获取局部变量的地址(& 符号),如下所示:
fibo(n,&fibN,&fibNMeno1);
因为您可能想要 fibo(n,&fibN,&fibNMeno1)
而不是 fibo(n,fibN,fibNMeno1)
...
您的 fibo
函数接受一个 int
和两个指针。你用三个整数打电话。因此编译器无法进行隐式转换。
你好,我在斐波那契上用 C++ 编写的这个程序有问题,我试图搜索 google 错误,但我没有找到 solution/explanation。
有代码:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
using namespace std;
int fibo(int,int*,int*);
int conta=0;
int main() {
int n,m,f;
int fibN=1;
int fibNMeno1=0;
cout << "Calcolo del numero di Fibonacci di indice n \n \n" << endl;
cout << "Introdurre n (positivo e minore di 47:" << endl;
cin >> n;
n=abs(n/1);
if (n<1) {
fibN=0;
}
else {
fibo(n,fibN,fibNMeno1);
}
cout << "\n Fibonacci di indice " << n << "vale: " << fibN << endl;
cout << "\n numero di chiamate ricorsive: " << conta << "\n\n" << endl;
}
int fibo(int n, int*pfn, int* pfnMeno1) {
int t;
int tFn,tFnMeno1,tF;
conta++;
if (n==1) {
*pfn=1; *pfnMeno1=0; return 1;
}
else {
t=n%2; n=n/2;
fibo(n,pfn,pfnMeno1);
tFn=(*pfn)*(*pfn)+2*(*pfn)*(*pfnMeno1);
tFnMeno1=(*pfn)*(*pfn) + (*pfnMeno1)*(*pfnMeno1);
if(t) {
tF=tFn;
tFn=tFn + tFnMeno1;
tFnMeno1=tF;
}
*pfn=tFn;
*pfnMeno1=tFnMeno1;
return 3;
}
}
哪里出错了?它如何在 C++ 上使用 *?
fibonacci.cpp: In function ‘int main()’:
fibonacci.cpp:23:22: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
fibo(n,fibN,fibNMeno1);
^
fibonacci.cpp:7:5: note: initializing argument 2 of ‘int fibo(int, int*, int*)’
int fibo(int,int*,int*);
^
fibonacci.cpp:23:22: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
fibo(n,fibN,fibNMeno1);
^
fibonacci.cpp:7:5: note: initializing argument 3 of ‘int fibo(int, int*, int*)’
int fibo(int,int*,int*);
fibN/fibNMeno1 具有 int 类型,但您的函数要求。 int * 类型,它是一个指向 int 的指针。
如果您想将 int 作为 int * 传递,您需要获取局部变量的地址(& 符号),如下所示:
fibo(n,&fibN,&fibNMeno1);
因为您可能想要 fibo(n,&fibN,&fibNMeno1)
而不是 fibo(n,fibN,fibNMeno1)
...
您的 fibo
函数接受一个 int
和两个指针。你用三个整数打电话。因此编译器无法进行隐式转换。