Всем привет!
Имеется:
linux x86_64
fpc-2.7.1
lazarus-0.9.31-33059-20111024
GLScene v 1.1 svn rev 5593
При сборке получаю такую ошибку:
GLSimpleNavigation.pas(265,11) Error: Can't determine which overloaded function to call
Ругань на такой кусок кода:
cat GLSimpleNavigation.pas|grep '/ Power'
/ Power(FZoomSpeed, Sign * WheelDelta div Abs(WheelDelta))
В модуле VectorGeometry описаны 2 функции Power:
cat VectorGeometry.pas|grep 'function Power'|grep over
function Power(const Base, Exponent: Single): Single; overload;
function Power(Base: Single; Exponent: Integer): Single; overload;
Какую из них использовать и как их явно указать?
GLScene v 1.1 & lazarus-0.9.31 & fpc-2.7.1 & linux x86_64
Модератор: Модераторы
Судя по тому, что используется div - целочисленное деление, то наверно так
Код: Выделить всё
Power(FZoomSpeed, Integer(Sign * WheelDelta div Abs(WheelDelta)))Спасибо за наводку. Получились следующие патчи:
--- /home/ashen/work/pascal/lazarus/lazarus/components/glscene/Source/GLSimpleNavigation.pas 2011-11-07 09:12:48.000000000 +0200
+++ /home/ashen/work/pascal/experementals/lazarus/components/glscene/Source/GLSimpleNavigation.pas 2011-11-08 06:46:00.000000000 +0200
@@ -262,10 +262,10 @@
begin
if lCamera.CameraStyle = csOrthogonal then
lCamera.FocalLength := FGLSceneViewer.Camera.FocalLength
- / Power(FZoomSpeed, Sign * WheelDelta div Abs(WheelDelta))
+ / Power(FZoomSpeed, Integer(Sign * WheelDelta div Abs(WheelDelta)))
else
lCamera.AdjustDistanceToTarget(
- Power(FZoomSpeed, Sign * WheelDelta div Abs(WheelDelta)));
+ Power(FZoomSpeed, Integer (Sign * WheelDelta div Abs(WheelDelta))));
end;
if snoMouseWheelHandled in FOptions then
--- /home/ashen/work/pascal/lazarus/lazarus/components/glscene/Source/Base/CurvesAndSurfaces.pas 2011-11-07 09:12:48.000000000 +0200
+++ /home/ashen/work/pascal/experementals/lazarus/components/glscene/Source/Base/CurvesAndSurfaces.pas 2011-11-08 07:29:34.000000000 +0200
@@ -66,7 +66,8 @@
ti, tni : Single;
begin
if (t=0) and (i=0) then ti:=1 else ti:=Power(t,i);
- if (n=i) and (t=1) then tni:=1 else tni:=Power(1-t,n-i);
+// if (n=i) and (t=1) then tni:=1 else tni:=Power(1-t,n-i);
+ if (n=i) and (t=1) then tni:=1 else tni:=Power(1-t,Integer(n-i));
Result:=(Factorial(n)/(Factorial(i)*Factorial(n-i)))*ti*tni;
end;
на x86_64 всё скомпилировалось.
--- /home/ashen/work/pascal/lazarus/lazarus/components/glscene/Source/GLSimpleNavigation.pas 2011-11-07 09:12:48.000000000 +0200
+++ /home/ashen/work/pascal/experementals/lazarus/components/glscene/Source/GLSimpleNavigation.pas 2011-11-08 06:46:00.000000000 +0200
@@ -262,10 +262,10 @@
begin
if lCamera.CameraStyle = csOrthogonal then
lCamera.FocalLength := FGLSceneViewer.Camera.FocalLength
- / Power(FZoomSpeed, Sign * WheelDelta div Abs(WheelDelta))
+ / Power(FZoomSpeed, Integer(Sign * WheelDelta div Abs(WheelDelta)))
else
lCamera.AdjustDistanceToTarget(
- Power(FZoomSpeed, Sign * WheelDelta div Abs(WheelDelta)));
+ Power(FZoomSpeed, Integer (Sign * WheelDelta div Abs(WheelDelta))));
end;
if snoMouseWheelHandled in FOptions then
--- /home/ashen/work/pascal/lazarus/lazarus/components/glscene/Source/Base/CurvesAndSurfaces.pas 2011-11-07 09:12:48.000000000 +0200
+++ /home/ashen/work/pascal/experementals/lazarus/components/glscene/Source/Base/CurvesAndSurfaces.pas 2011-11-08 07:29:34.000000000 +0200
@@ -66,7 +66,8 @@
ti, tni : Single;
begin
if (t=0) and (i=0) then ti:=1 else ti:=Power(t,i);
- if (n=i) and (t=1) then tni:=1 else tni:=Power(1-t,n-i);
+// if (n=i) and (t=1) then tni:=1 else tni:=Power(1-t,n-i);
+ if (n=i) and (t=1) then tni:=1 else tni:=Power(1-t,Integer(n-i));
Result:=(Factorial(n)/(Factorial(i)*Factorial(n-i)))*ti*tni;
end;
на x86_64 всё скомпилировалось.
