[borland c++]simpele programmas compilen met g++

Pagina: 1
Acties:

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ik leer c++ op school alleen dat doen we in borland c++ , en nu probeer ik me programma's te compilen met cpp maar dat wil niet echt lukken in linux...ben maar begonnen met een van de eerste programmas en heb het volgende prob.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <curses.h>
#include <iostream.h>
#include <stdio.h>
#include <math.h>

int waarde;
int macht;
int antwoord(int wr,int ma);


void main()
{
      clear();
      cout << "geef de waarde waarvan de macht berekend moet worden:"<<endl;
      cin >> waarde;
      cout << "geef de macht die je van de waarde wil berekenen"<<endl;
      cin >> macht;
      cout << waarde <<" tot de "<<macht<<"e macht is: ";
      cout << (antwoord(waarde,macht));
      getch();
}

int antwoord(wr,ma)
{
      return (pow(wr,ma));
}

geeft de volgende errors:
code:
1
2
3
4
5
6
test.cpp:23: `wr' was not declared in this scope
test.cpp:23: `ma' was not declared in this scope
test.cpp:24: `int antwoord' redeclared as different kind of symbol
test.cpp:8: previous declaration of `int antwoord (int, int)'
test.cpp:24: initializer list being treated as compound expression
test.cpp:24: syntax error before `{'

terwijl dit onder windows gewoon makkelijk compilede(is al iets aangepast...

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Ik suk enorm in C++ maar 't lijkt me nogal raar om 2x aan te geven dat antwoord() een int terug geeft..

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Op woensdag 30 januari 2002 01:03 schreef bartvb het volgende:
Ik suk enorm in C++ maar 't lijkt me nogal raar om 2x aan te geven dat antwoord() een int terug geeft..
tja het originele programma compilede wel met dat in borland cpp

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Tja, brakke HTML werkt ook in IE, dat wil nog niet zeggen dat die HTML dan goed is >:)

Verwijderd

Ben ook geen held in c, maar dit onderstaande compileert wel in gpp
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <curses.h>
#include <iostream.h>
#include <stdio.h>
#include <math.h>

int waarde;
int macht;
int antwoord(int wr,int ma);

void main()
{
      cout << "geef de waarde waarvan de macht berekend moet worden:" << endl;
      cin >> waarde;
      cout << "geef de macht die je van de waarde wil berekenen" << endl;
      cin >> macht;
      cout << waarde << " tot de " << macht << "e macht is: ";
      cout << (antwoord(waarde,macht));
}

int antwoord(int wr, int ma)
{
      return pow(wr,ma);
}

Alleen even toegevoegd een int wr en int ma, zodat boven en beneden de functie declaratie gelijk is. Kreeg verder de clear() en de getch() niet aan de praat, maar dat zou jouw probleem wel niet zijn.
Waarom wil je eigenlijk forward declaration en zet je niet gewoon je functie antwoord boven je main?

O ja compiler maakt natuurlijk nog wel warnings:
test.cpp: In function `int antwoord(int, int)':
test.cpp:22: warning: return to `int' from `double'

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

de goede code :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <curses.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

int waarde;
int macht;
int antwoord (int wr, int ma);


int main ()
{
      clear();
      cout << "geef de waarde waarvan de macht berekend moet worden:"<<endl;
      cin >> waarde;
      cout << "geef de macht die je van de waarde wil berekenen"<<endl;
      cin >> macht;
      cout << waarde <<" tot de "<<macht<<"e macht is: ";
      cout << (antwoord(waarde,macht));

      getch();

      return 0;
}

int antwoord (int wr, int ma)
{
      return (int) pow (wr,ma);
}

even van boven naar beneden:

#include <conio.h>
toegevoegd voor de getch () functie, hier kom ik later op terug

int main ()
de returntype van main behoort altijd int te zijn. De returnwaarde is de exitcode van het programma

clear ();
ik weet niet wat die functie doet, maar die zal dan wel in cursus.h staan, aangezien er niet over gezeurd wordt :)

getch ();
dit is geen standaard ANSI C functie, en wordt daarom ook niet ondersteund in alle libs. Als ie wel wordt ondersteund staat ie echter meestal in conio.h
Alternatief is getchar (), die wel ANSI C is, maar die leest uit met echo, dus dan moet je persee eerst op enter drukken, en is dus waarschijnlijk niet wat je wilt

return 0;
aangezien main () een int returnt, moet je een waarde teruggeven. 0 is standaard voor als er geen errors zijn, maar verder ben je geheel vrij in wat je teruggeeft

int antwoord (int wr, int ma)
De functie moet gelijk zijn aan de eerdere declaratie. In C++ kun je namelijk meerdere functies hebben met dezelfde naam, maar met andere parameters. Aangezien je hier doelt op een antwoord met 2 ints als parameter, zul je die ook overal zo moeten declareren

return (int)pow (wr, ma);
de functie pow () geeft een double terug. Omdat je die double niet zomaar kan converteren naar een int (afronding en dergelijke), moet je die expliciet casten door er (int) voor te zetten

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.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
OiSyN: even van boven naar beneden
+3, zeer duidelijk en behulpzaam :* .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
de goede code :)
code:
1
return (int)pow (wr, ma);

de functie pow () geeft een double terug. Omdat je die double niet zomaar kan converteren naar een int (afronding en dergelijke), moet je die expliciet casten door er (int) voor te zetten
Door dat casten bouw je natuurlijk wel een bug die vroeg of laat opduikt....

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Op woensdag 30 januari 2002 05:02 schreef OiSyN het volgende:
getch ();
dit is geen standaard ANSI C functie, en wordt daarom ook niet ondersteund in alle libs. Als ie wel wordt ondersteund staat ie echter meestal in conio.h
Alternatief is getchar (), die wel ANSI C is, maar die leest uit met echo, dus dan moet je persee eerst op enter drukken, en is dus waarschijnlijk niet wat je wilt
Ja, dat vroeg ik me dus altijd al af, als je helemaal ANSI C wilt blijven, hoe kun je dat toch zorgen dat ie een char leest zonder dat je eerst op enter moet drukken???

He who knows only his own side of the case knows little of that.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op woensdag 30 januari 2002 05:06 schreef mbravenboer het volgende:

[..]

+3, zeer duidelijk en behulpzaam :* .
en dat om 5 uur 's nachts :)
Op woensdag 30 januari 2002 10:08 schreef RickN het volgende:

[..]

Ja, dat vroeg ik me dus altijd al af, als je helemaal ANSI C wilt blijven, hoe kun je dat toch zorgen dat ie een char leest zonder dat je eerst op enter moet drukken???
ja ik zat er ook naar te zoeken toen ik wilde posten... normaal gebruik ik ook altijd gewoon getch () :) maar volgens mij is er gewoon geen ANSI C versie van (best wel logisch eigenlijk, want als er wel een ANSI C versie van is, waarom zou getch () dan bestaan? :))

misschien als je stdin als binary opent, maar volgens mij is er geen manier om over te schakelen als een file al geopend is, en hoe zou je in hemelsnaam stdin kunnen heropenen

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.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

nee dus, ik heb het even geprobeerd met setmode (ook geen ANSI C functie :)), en als je stdin daarmee op binary zet dan nog moet je op enter drukken voordat ie verder gaat

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.


  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Wow dank je

ik mag dus hieruit ong concluderen dat die borland compiler niet zo heel precies is, ik heb namelijk nog een spelletje voor een project in c++ geschreven, die werkt perfect met de borlandcpp compiler, alleen ik wou die dus ook onder linux compilen maar als ik dan 5 pagina's code zo langs moet gaan lopen...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

de precisiteit (is dat een woord :? :)) van de compiler heeft er in principe niets mee te maken (misschien genereert borland standaard wat minder warnings, maar ook dat kun je instellen)

elk platform en pakket heeft zijn eigen libraries en API. de ANSI C library bestaat uit een groepje gestandaardiseerde functies, en worden dan ook altijd wel in alle platformen en pakketten ondersteund. Verder zijn er altijd nog wel andere functies die niet overal ondersteund worden, zoals getch ()

d'r is nog een standaard, de POSIX standaard, die zorgt voor portability tussen platformen. Is in principe net zoiets als ANSI C, maar wordt niet overal ondersteund, en is dacht ik ook meer bedoeld om te zorgen voor portability tussen de verschillende unix/linux varianten.

Dus het is nog maar de vraag of je idd veel code moet aanpassen. Ligt er ook maar net aan wat je gebruikt voor je spel (als het graphisch is kun je er donder op zegge dat het iig niet werkt :))

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.


Verwijderd

Op woensdag 30 januari 2002 05:02 schreef OiSyN het volgende:
de goede code :)
code:
1
2
#include <curses.h>
...

clear ();
ik weet niet wat die functie doet, maar die zal dan wel in cursus.h staan, aangezien er niet over gezeurd wordt :)
Dat was curses.h, vloeken zijn niet gelijk aan lesstof lijkt mij. ;)
Pagina: 1