[g++ en complexe getallen] probleem met headers?

Pagina: 1
Acties:

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
Ik wil een c++ functies schrijven waarin ik complexe getallen gebruik. De compiler die ik gebruik is g++-3.3. Om de een of andere reden kan ik het onderstaande testprogrammatje niet compileren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <complex>
#include <iostream>
using namespace std;

int main() {
    complex double a;
    complex double b;
    
    a=1.+2.*I;
    b=2.+1.*I;
    
    cout << "sum: " << a + b << endl;
    cout << "dif: " << a - b << endl;
}


Als ik dit compile met 'g++ -o complextest.o complextest.cc' krijg ik de volgende foutmeldingen:
code:
1
2
3
4
5
6
7
8
9
10
11
complextest.cc: In function `int main()':
complextest.cc:6: error: use of class template `template<class _Tp> class
   std::complex' as expression
complextest.cc:6: error: parse error before `double'
complextest.cc:7: error: use of class template `template<class _Tp> class
   std::complex' as expression
complextest.cc:9: error: `a' undeclared (first use this function)
complextest.cc:9: error: (Each undeclared identifier is reported only once for
   each function it appears in.)
complextest.cc:9: error: `I' undeclared (first use this function)
complextest.cc:10: error: `b' undeclared (first use this function)


Er gaat blijkbaar iets fout met de include statements. Ik heb alleen redelijk basale C++ kennis, en toen ik C++ leerde, werden libraries geinclued met '#include<library.h>', maar dat doet het hier net zo min.
Wat is hier aan de hand?

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Je geeft niet op de juiste manier het type op voor de complex template. En je kan niet simpel zeggen: a=1.0+2.0*i

Wat wel kan:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <complex>
#include <iostream>
using namespace std;

int main() {
    complex<double> a; // de '<' en '>' staan om het type heen.
    complex<double> b;

    a = complex<double>( 1., 2.); // assignment met een anoniem object.
    b = complex<double>( 2., 1.);

    cout << "sum: " << a + b << endl;
    cout << "dif: " << a - b << endl;
    cout << "real part of a: " << a.real() << '\n';
    cout << "im. part of a: " << a.imag() << '\n';
}

[ Voor 25% gewijzigd door _Squatt_ op 30-10-2003 01:21 . Reden: konqueror gooit er opeens heel veel \n's doorheen... ]

"He took a duck in the face at two hundred and fifty knots."


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je zou i nog evt. kunnen definieren als een variabele van complex type dat gelijk is aan i

C++:
1
2
3
4
5
6
7
8
#include <complex>

const std::complex<double> I (0.0, 1.0);

int main ()
{
    std::complex<double> c = 3.0 + 1.3 * I;
}

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
Bedankt voor de tips! Het test programmatje dat ik hierboven heb neergezet was geinspireerd door de glibc manual, het was dus eigenlijk C.
Weet iemand waar ik documentatie over de standaard C++ classses kan vinden. Ik heb libstdc++5-doc geinstalleerd, maar daarin staan geen overzicht met omschrijvingen, classes, lidfuncties enz.

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
In de faq staat geloof ik een link naar de site van dinkumware (die maken de STL die o.m. bij de MS compilers zit). Bij SGI hebben ze ook een uitvoerige documentatie.

Ik kijk meestal snel even in C++ Annotations.

"He took a duck in the face at two hundred and fifty knots."


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

En de MSDN natuurlijk, hoewel de online variant ietwat irritant browsed

[ Voor 24% gewijzigd door .oisyn op 30-10-2003 23:51 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1