[C++] Vage compile error

Pagina: 1
Acties:

  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
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
31
32
33
main.cpp:

#include <iostream.h>
#include "gcd.h"

main () 
{  

   cout << "Geef 2 cijfers gescheiden door een spatie: ";
   int x, y;

   while (cin >> x && cin >> y) {
    if (x > 0 && y > 0) cout << "De grootste gemene deler is: " << gcd(x,y) << '\n';
    return 0;
   }
}

gcd.cpp:
int gcd(int u, int v) 
{
   int t;
   while (u > 0) {
    if (u < v) { // swap u and v 
       t = u;
       u = v;
       v = t;
    }  
    u = u - v;
   } 
   return v;
}  
gcd.h:
int gcd( int u, int v);

Ik gebruik DevC++ 4.9.3.0 om te compilen en krijg de volgende error:

[Linker error] undefined reference to `WinMain@16'

Iemand enig idee wat ik fout doe?

webOS all the way!


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 19:47

johnwoo

3S-GTE

Is het wel een console app, of is het een Win32 app?

Een Windows applicatie gebruikt namelijk WinMain als entry point.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Console app, als ik gewoon alles in de main gooit doet ie het perfect en compiled ie m... Maar als ik er een main.cpp, gcd.h en gcd.cpp van maak krijg ik dus die compile error :?

Compile log:
code:
1
2
3
4
5
Executing  g++.exe...
g++.exe "C:\cplusplus\chap4\47\gcd.cpp" -o "C:\cplusplus\chap4\47\gcd.exe"   -s   -L"C:\Program" -L"Files\Tools\Development\Dev-C++\lib"
C:/Program Files/Tools/Development/Dev-C++/Bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../libmingw32.a(main.o)(.text+0x7f):main.c: undefined reference to `WinMain@16'

Execution terminated

webOS all the way!


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 19:47

johnwoo

3S-GTE

Misschien ligt het dan aan het feit dat je de return type van main() niet gedefinieerd hebt?

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Borland C++ builder?

USING directive gebruikt?
Niet goed gelezen. Sorry :)

  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Op maandag 27 mei 2002 14:14 schreef Glimi het volgende:
Borland C++ builder?

USING directive gebruikt?
DevC++ zoals ik al zei.

Het vage is dat ie het wel gewoon doet als ik alles in de main gooi :? Maar voor school moet ik het in 3 files gooien, de main.cpp, gcd.h en gcd.cpp en dan doet ie het dus niet :(

webOS all the way!


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

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
#include <iostream.h>

int gcd( int u, int v);
int main(int argc, char* argv[])
{
   cout << "Geef 2 cijfers gescheiden door een spatie: ";
   int x, y;

   while (cin >> x && cin >> y) {
    if (x > 0 && y > 0) cout << "De grootste gemene deler is: " << gcd(x,y) << '\n';
    return 0;
   }
}

int gcd(int u, int v)
{
   int t;
   while (u > 0) {
    if (u < v) { // swap u and v
       t = u;
       u = v;
       v = t;
    }
    u = u - v;
   }
   return v;
}

uit lui oogpunt ff 1 file gemaakt
Borland C++ builder v5 doet het prima

Doet iets met Cloud (MS/IBM)


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Staan er misschien andere versies van die file ergens op de machine in het path?

  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Op maandag 27 mei 2002 14:19 schreef D2k het volgende:
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
#include <iostream.h>

int gcd( int u, int v);
int main(int argc, char* argv[])
{
   cout << "Geef 2 cijfers gescheiden door een spatie: ";
   int x, y;

   while (cin >> x && cin >> y) {
    if (x > 0 && y > 0) cout << "De grootste gemene deler is: " << gcd(x,y) << '\n';
    return 0;
   }
}

int gcd(int u, int v)
{
   int t;
   while (u > 0) {
    if (u < v) { // swap u and v
       t = u;
       u = v;
       v = t;
    }
    u = u - v;
   }
   return v;
}

uit lui oogpunt ff 1 file gemaakt
Borland C++ builder v5 doet het prima
Dat doet ie hier dus ook prima... Alleen in 3 files niet :( Ik doe wat fout, maar zou niet weten wat :( M'n syntaxis lijkt wel te kloppen, maar ik ben ook maar een c++ n00b :(

webOS all the way!


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op maandag 27 mei 2002 14:22 schreef Hermanvh het volgende:

[..]

Dat doet ie hier dus ook prima... Alleen in 3 files niet :( Ik doe wat fout, maar zou niet weten wat :( M'n syntaxis lijkt wel te kloppen, maar ik ben ook maar een c++ n00b :(
dan zal ik um ook ff minder lui proberen
hold on

.edit ik zie het al denk ik
volgens mij geef je nergens aan waar die functie staat. je doet niets met gcd.cpp

Doet iets met Cloud (MS/IBM)


  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Op maandag 27 mei 2002 14:24 schreef D2k het volgende:

[..]

dan zal ik um ook ff minder lui proberen
hold on

.edit ik zie het al denk ik
volgens mij geef je nergens aan waar die functie staat. je doet niets met gcd.cpp
Ik include de gcd.h als prototype en de gcd.cpp vraagt ie als het goed is op met
code:
1
if (x > 0 && y > 0) cout << "De grootste gemene deler is: " << gcd(x,y)

webOS all the way!


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
Lijkt wel of de file waar je main staat niet wordt meegelinked.

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.


  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Op maandag 27 mei 2002 14:33 schreef farlane het volgende:
Lijkt wel of de file waar je main staat niet wordt meegelinked.
Hoe moet ik dat dan wel doen? Of is het echt een compiler error?

webOS all the way!


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Zoeken in Google met
"[Linker error] undefined reference to `WinMain@16'"

Levert op:
http://www.bloodshed.net/faq.html#3

met de tekst:

3. After linking, i get the error C:\DEV-C++\LIB\\libmingw32.a(main.o)(.text+0x8e): undefined reference to `WinMain@16'

You probably havent declared any main() function in your program. Otherwise, try recompiling a second time.

En nog vierentwintig andere zoekresultaten, heb je die allemaal bekeken?

  • igmar
  • Registratie: April 2000
  • Laatst online: 23-08 16:57

igmar

ISO20022

Console app, als ik gewoon alles in de main gooit doet ie het perfect en compiled ie m... Maar als ik er een main.cpp, gcd.h en gcd.cpp van maak krijg ik dus die compile error :?

Compile log:
[code]Executing g++.exe...
g++.exe "C:\cplusplus\chap4\47\gcd.cpp" -o "C:\cplusplus\chap4\47\gcd.exe" -s -L"C:\Program" -L"Files\Tools\Development\Dev-C++\lib"
C:/Program Files/Tools/Development/Dev-C++/Bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../libmingw32.a(main.o)(.text+0x7f):main.c: undefined reference to `WinMain@16'
Je project is niet goed. De compiler probeert een gcd.exe te maken uit gcd.c. Gezien het feit dat dat ding inderdaad geen main() bevat krijg je die error.

Bij de meeste IDE's moet je een project aanmaken, en daarna de goede files toevoegen.

  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Op maandag 27 mei 2002 14:41 schreef igmar het volgende:

[..]

Je project is niet goed. De compiler probeert een gcd.exe te maken uit gcd.c. Gezien het feit dat dat ding inderdaad geen main() bevat krijg je die error.

Bij de meeste IDE's moet je een project aanmaken, en daarna de goede files toevoegen.
Jezus wat voel ik me |:( Idd vergeten project aan te maken |:( |:(

Thanx iedereen in ieder geval!

webOS all the way!


Verwijderd

Nu nog een efficient gcd algoritme :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class T>
T gcd(T u, T v)
  {
    T t;
    if(u < v) {
    t= u;
    u= v;
    v= t;
    }
    while(v > 0) {
    t= v;
    v= u % v;
    u= t;
    }
    return u;
  }

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Is dit effienter dan wat er stond?
Hoezo?
Op maandag 27 mei 2002 15:31 schreef mietje het volgende:
Nu nog een efficient gcd algoritme :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class T>
T gcd(T u, T v)
  {
    T t;
    if(u < v) {
    t= u;
    u= v;
    v= t;
    }
    while(v > 0) {
    t= v;
    v= u % v;
    u= t;
    }
    return u;
  }

Verwijderd

Op maandag 27 mei 2002 16:00 schreef Goodielover het volgende:
Is dit effienter dan wat er stond?
Hoezo?
1) Modulus berekening ipv. herhaaldelijk aftrekken voor het bepalen van de rest; de while-lus wordt veel minder vaak doorlopen.
2) Automatisch swappen van de kleinste waarde naar variabele v, spaart een if() binnen de while-lus.

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op maandag 27 mei 2002 16:20 schreef mietje het volgende:

[..]

1) Modulus berekening ipv. herhaaldelijk aftrekken voor het bepalen van de rest; de while-lus wordt veel minder vaak doorlopen.
2) Automatisch swappen van de kleinste waarde naar variabele v, spaart een if() binnen de while-lus.
De modulus bewerking zal nooit <0 opleveren (volgens mij) dus oneindige loop. Lijkt me niet echt efficient. Ik ken helemaal gaan C++, dus ik kan er naast zitten.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op maandag 27 mei 2002 16:54 schreef Goodielover het volgende:
De modulus bewerking zal nooit <0 opleveren (volgens mij)
Nee maar het kan wel 0 worden ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op maandag 27 mei 2002 16:54 schreef Goodielover het volgende:

[..]

De modulus bewerking zal nooit <0 opleveren (volgens mij) dus oneindige loop. Lijkt me niet echt efficient. Ik ken helemaal gaan C++, dus ik kan er naast zitten.
fout, een modulo waarvan de lhs negatief is, levert ook een negatief getal op (erg vervelend als je het mij vraagt, maar goed)

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.


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op maandag 27 mei 2002 21:03 schreef .oisyn het volgende:
fout, een modulo waarvan de lhs negatief is, levert ook een negatief getal op (erg vervelend als je het mij vraagt, maar goed)
Hmm ja wie doet nou ook van die onconventionele dingen? :P

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

grmmpf :X ;)

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

Zo te zien, zoekt de linker in de directories: "C:\Program"
en "Files\Tools\Development\Dev-C++\lib" naar objecten.

Dit zou eigenlijk: "C:\Program Files\Tools\Development\Dev-C++\lib" moeten zijn, maar blijkbaar snapt je ontwikkelomgeving niet dat er ook spaties in de directory naam kunnen zitten |:(

Waarschijnlijk werkt het allemaal een stuk beter als je "normale" directory namen gebruikt i.p.v. directory namen met spaties.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Program Files -> progra~1

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

en als je er quotes omheen zet?

bijv: "C:\program files\..."

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.


  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Op maandag 27 mei 2002 22:21 schreef woetpekker het volgende:
Zo te zien, zoekt de linker in de directories: "C:\Program"
en "Files\Tools\Development\Dev-C++\lib" naar objecten.

Dit zou eigenlijk: "C:\Program Files\Tools\Development\Dev-C++\lib" moeten zijn, maar blijkbaar snapt je ontwikkelomgeving niet dat er ook spaties in de directory naam kunnen zitten |:(

Waarschijnlijk werkt het allemaal een stuk beter als je "normale" directory namen gebruikt i.p.v. directory namen met spaties.
* Hermanvh wil z'n schijf een beetje overzichtelijk houden en een hedendaagse compiler moet nu onderhand wel met spaties in directories kunnen werken lijkt me :) We werken er nu al mee sinds Windows 95 :O

webOS all the way!


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 18:44
Op maandag 27 mei 2002 21:03 schreef .oisyn het volgende:

[..]

fout, een modulo waarvan de lhs negatief is, levert ook een negatief getal op (erg vervelend als je het mij vraagt, maar goed)
Op 27 juni 1998 schreef ISO het volgende::)
If the second operand of / or % is zero the behavior is undefined; otherwise (a/b)*b + a%b is equal to a. If both operands are nonnegative then the remainder is nonnegative;
if not, the sign of the remainder is implementation-defined.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

MSalters: hij code voor windows op een x86 met DevC++, waarbij je dus een negatief resultaat krijgt als de eerste operand negatief is ;)

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

* Hermanvh wil z'n schijf een beetje overzichtelijk houden en een hedendaagse compiler moet nu onderhand wel met spaties in directories kunnen werken lijkt me We werken er nu al mee sinds Windows 95
En het lijkt er op dat jij daar niet mee om kunt gaan. GCC heeft er in elk geval geen problemen mee. De rest van de wereld heeft nl. al een paar jaartjes langer de mogelijkheid spaties in bestandsnamen te gebruiken.

Gebruik quotes.

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Op maandag 27 mei 2002 22:21 schreef woetpekker het volgende:
Zo te zien, zoekt de linker in de directories: "C:\Program"
en "Files\Tools\Development\Dev-C++\lib" naar objecten.

Dit zou eigenlijk: "C:\Program Files\Tools\Development\Dev-C++\lib" moeten zijn, maar blijkbaar snapt je ontwikkelomgeving niet dat er ook spaties in de directory naam kunnen zitten |:(

Waarschijnlijk werkt het allemaal een stuk beter als je "normale" directory namen gebruikt i.p.v. directory namen met spaties.
Euh... :? Dat maakt geen hol uit, Dev-C++ is een Win32 compiler, dus moet ie dat ondersteunen.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
* Hermanvh is weer ff verder aan't spelen, en loopt weer tegen een klein probleempje aan ;)
main.cpp
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <stdlib.h>
#include "morse.h"
using std::endl;
using std::cout;    using std::cin;

int main()
{
  char m[500];
  cin.getline(m, 500);
  for (char *p=m; *p; p++)
    cout << code(*p) << ' ';
  cout << endl;
}

morse.cpp
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream.h>
char *tab[] = {".-",    "-...",  "-.-.", "-..",  ".",    "..-.",
           "--.",   "....",  "..",   ".---", "-.-",  ".-..",
           "--",    "-.",    "---",  ".--.", "--.-", ".-.",
           "...",   "-",    "..-",  "...-", ".--",  "-..-",
           "-.--",  "--.."};

char *code(char c)
{
  if (c>='A' and c<='Z')
    c = c -'A' + 'a';
  if (c >= 'a' and c <='z')
    return tab[c-'a'];
  else if (c == ' ' or c == '\t')
    return " ";
  else
    return "";
}

morse.h
code:
1
2
char *tab[];
char *code(char c);

Hij geeft als compile error: 'C:\48\morse.h storage size of `tab' isn't known'

Als ik een array definieer dan hoef ik hier toch niet verplicht een grootte op te geven, of doe ik weer eens iets fout? (retorische vraag >:))

webOS all the way!


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
extern?

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.


  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Op dinsdag 11 juni 2002 13:54 schreef farlane het volgende:
extern?
Huh :? Wat bedoel je daarmee?

webOS all the way!


  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Op dinsdag 11 juni 2002 11:08 schreef Hermanvh het volgende:
Als ik een array definieer dan hoef ik hier toch niet verplicht een grootte op te geven, of doe ik weer eens iets fout?
Jawel, of probeer het eens uit... Je hebt 26 plaatsjes nodig voor 26 char pointers, waarom zou je de grootte weg willen laten?

  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Ok, dan geef ik dus een array van 26 op :)
code:
1
char *tab[26]

Maar dan krijg ik wazige parse error :?
Line 10 C:\48\morse.cpp parse error before `c'
Line 12 C:\48\morse.cpp parse error before `c'

Iemand die me ff verder kan helpen? Ik kom er echt ff niet meer uit :(

webOS all the way!


Verwijderd

Op dinsdag 11 juni 2002 14:45 schreef Hermanvh het volgende:
Maar dan krijg ik wazige parse error :?
Line 10 C:\48\morse.cpp parse error before `c'
Line 12 C:\48\morse.cpp parse error before `c'

Iemand die me ff verder kan helpen? Ik kom er echt ff niet meer uit :(
Wazig? Helemaal niet wazig! Volgens mij zijn jouw "and" en "or" operators wazig ;)

Probeer "||" ipv. "or" en "&&" ipv. "and".

<edit>
/me heeft tijd over :)
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
31
32
33
34
#include <iostream>
#include <string>

const char *codes[]= {
      ".-",   "-...", "-.-.", "-..",  ".",    "..-.",
      "--.",  "....", "..",   ".---", "-.-",  ".-..",
      "--",   "-.",   "---",  ".--.", "--.-", ".-.",
      "...",  "-",    "..-",  "...-", ".--",  "-..-",
      "-.--", "--.."
};

const char* encode(int ch) {
  if('A' <= ch && ch <= 'Z') {
    return codes[ch - 'A'];
  }
  if('a' <= ch && ch <= 'z') {
    return codes[ch - 'a'];
  }
  if(ch == ' ' || ch == '\t' || ch == '\n') {
    return " ";
  }
  return "";
}

int main() {
  std::string str;
  while(std::getline(std::cin, str)) {
    for(std::string::const_iterator i= str.begin(); i != str.end(); ++i) {
    std::cout << encode(*i) << ' ';
    }
    std::cout << std::endl;
  }
  return 0;
}

</edit>

  • Hermanvh
  • Registratie: Januari 2001
  • Laatst online: 17-03 10:14

Hermanvh

webOS fan, hacker, developer

Topicstarter
Big thanx!

webOS all the way!

Pagina: 1