Toon posts:

[Vc++] class in header compilet niet *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Tja, ik vraag het hier maar, omdat ik geen idee heb hoe ik dit moet zoeken op et internet, en ik het idee heb dat ik alles goed doe:

Ik heb dit progje

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Test
{
public:
    static int lala();
};
int Test::lala()
{
    return 1;
}

int main(int argc, char* argv[])
{
    return Test::lala();
}


Werkt perfect

Nu verander ik dat in

header.h
C++:
1
2
3
4
5
6
7
8
#ifndef __HEADER__H_
#define __HEADER__H_
class Test
{
public:
    static int lala();
};
#endif

en
impl.c
C++:
1
2
3
4
5
#include "header.h"
int Test::lala()
{
    return 1;
}


en
main
C++:
1
2
3
4
5
#include "header.h"
int main(int argc, char* argv[])
{
    return lala();
}


En krijg ik de mooie error:
code:
1
(header.h) error C2061: syntax error : identifier 'Test'

Verwijderd

Topicstarter
Nou heb ik net een vers project gemaakt, en het lijkt erop alsof de extentie van de impl.c eigenlijk cpp moet zijn? Ik snap er niks van, het is vast een van de kuren van VC++ 6.0 :/

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
De C/C++ compiler gokt het bestandstype (C? C++?) naar aanleiding van de extensie. Je C++ bestand moet dus een .cpp-extensie hebben (of een andere extensie die ondersteund wordt; dat is een beetje compiler-afhankelijk), anders compileert de compiler je code als C-code en dan begrijpt 'ie uiteraard geen classes.

Je kunt in Visual Studio het bestandstype ook wel overriden, dacht ik. Moet je even rechts klikken op zo'n bestandje in de file browser en een beetje pielen; ik weet niet precies hoe dat zit. Het is hoe dan ook aan te raden een standaardextensie te gebruiken; dat is altijd makkelijker.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
offtopic:
Het heeft niets met je probleem van doen, maar ik zou je willen adviseren om de declaratie en de implementatie dezelfde naam te geven (conventie is de naam van de class), met uitzondering van de extentie natuurlijk :)
Als mensen Test.h en Test.cpp zien staan, dan weet men dat het hier om een header en implementatie van een klasse Test gaat en kan men beide files makkelijk matchen bij elkaar.

Bij je huidige naamgeving heb ik geen idee wat in de desbetreffende headers staat maar ik weet wel dat een .h file een header is, dus dat hoef je niet dubbel te vermelden :)

Verwijderd

offtopic:
@glimi : jouw verhaal gaat alleen maar op als je maar 1 class in een file definieert. Misschien is hij wel van plan een heel framework in impl.cpp en header.h op te nemen? In welk geval hij dan overigens nog steeds iets beter beschrijvende namen dan header en imp kan gebruiken maar goed...

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
Een dubbele underscore, of een underscore gevolgd door een hoofdletter aan het begin van een woord zijn overigens gereserveerd voor gebruik door de compiler. Je headerguard is dus illegaal. Bovendien ben je in je tweede main() de Test:: voor lala() vergeten.

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: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Overigens betreft het hier een compile error, geen link error ;)
* titel fix

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.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Soultaker schreef op 11 October 2003 @ 10:47:
Je kunt in Visual Studio het bestandstype ook wel overriden, dacht ik. Moet je even rechts klikken op zo'n bestandje in de file browser en een beetje pielen; ik weet niet precies hoe dat zit.
/Tc -> C , /Tp -> C++.

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.


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 23:00
Moet het ook niet 'Test::lala' zijn (in main)??

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Rowwan schreef op 13 October 2003 @ 09:12:
Moet het ook niet 'Test::lala' zijn (in main)??
Wel de posts lezen he ?
( [rml]MSalters in "[ Vc++] class in header compilet niet *"[/rml] )

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.


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 23:00
Sorry... over het hoofd gezien :)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Rowwan schreef op 13 October 2003 @ 09:39:
Sorry... over het hoofd gezien :)
np :)

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.

Pagina: 1