Kompilierungsproblem mit Blitz++ unter gcc 3.3.3

A

andrullo

Jungspund
:help:
Hallo!
Ich habe ein Numerik-Programm unter SUSE LINUX 7.1
unter der Verwendung des gcc-Compilers 2.95... und
der Matrix-Bibliothek Blitz++ Version 6 geschrieben,
was auch ohne Probleme compiliert wurde.
Nun verwende ich Blitz++ 7 und gcc 3.3.3, wo der
Quell-Code nicht mehr fehlerfrei übersetzt wird.
Leider weiss ich nicht warum und hoffe, das Ihr mir
vielleicht helfen könnt.
Hier ein Auszug aus dem Quell-Code und die Fehlermeldung:

Operatordefintion:
Array<Real,2> DiffParser:: operator()(const Real& t, const Array<Real,2>& Vars);

kritischer Code:

int newton(..., Array<Real,2>& Z,...)
{
.
.
Z = 0;
.
.
//kritische Zeile:
Z(Range::all(),Range(j,j)) = f(t_c[j],x+Z(Range::all(),Range(j,j)));
.
.
}

(Fehler)meldung:

g++ -c newton.cpp

newton.cpp: In function `int newton(const Real&, const int&, const blitz::Array<Real, 2>&, DiffParser&, bool, const int&, Real&, bool&, const Real*, const Real*, const bool&, blitz::Array<Real, 2>&, blitz::Array<Real, 2>&,
const int&, int&, const Real&, const Real&)':
newton.cpp:148: error: no match for call to
`(DiffParser) (Real&, blitz::_bz_ArrayExpr<blitz::_bz_ArrayExprOp<blitz::FastArrayIterator<Real, 2>,
blitz::FastArrayIterator<Real, 2>, blitz::Add<Real, Real> > >)'

DiffParser.h:25: error: candidates are:
blitz::Array<Real, 2> DiffParser::operator()(const Real&, const blitz::Array<Real, 2>&)
make: *** [newton.o] Fehler 1

Irgendwarum beschwert sich der Compiler, dass ich
ein Auswertung innerhalb der Funktionsargumente vollziehen
möchte.
bisheriges work around:
Einführen einer temporären Variablen zur Addition zur
Vermeidung der Auswertung im Funktionsargument

XTEMP = x+Z(Range::all(),Range(j,j));
Z(Range::all(),Range(j,j)) = f(t_c[j],XTEMP);

Mit dieser Abänderung wird der Code wieder
compiliert. Die Einführung einer temporären
Variable finde ich aber ineffizient und scheint mir
(hoffentlich) nicht nötig. Wie schon gesagt, unter den älteren Versionen lief das Programm problemlos.

Habt Ihr irgendwelche Ideen?

Gruß
Andre
 

Ähnliche Themen

GCC Crosscompiler unter Debian Wheezy

Windows clients können nicht mehr auf lange laufendes System zugreifen

Rollei Mini Wifi Camcorder

Fehler beim Kompilieren von qcserial

Portknocking mit iptables

Zurück
Oben