Toon posts:

[C++] Header en cpp files

Pagina: 1
Acties:

Onderwerpen


  • BlackHawkDesign
  • Registratie: maart 2005
  • Laatst online: 20:27
Goeiemiddag heren,

Ik ben ooit al eens eerder begonnen met C++ en heb toen ook wat in elkaar gedraaid. Alleen door de jaren heen is die kennis weer vergaan. Nu wil ik toch weer opnieuw c++ gaan oppakken. Nu lees ik overal dat ik me interface van me class in de header file moet stoppen en de implementatie in de cpp file.

Alleen ik krijg steeds build errors. Ik heb overal gezocht en ik kom steeds de code tegen die exact hetzelfde is als mijn code. Wat doe ik dan verkeerd? Zouden jullie mij op weg willen helpen?

main.cpp
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h";
#include <iostream>;
#include "MouseHandler.cpp";

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

    MouseHandler mouseHandler;
    mouseHandler.PreformClick();

    cin.get();

    return 0;
}


MouseHandler.h
C++:
1
2
3
4
5
class MouseHandler {
    public:
        void SetLocation(double x, double y);
        void PreformClick();
};

MouseHandler.cpp
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "MouseHandler.h";
#include "stdafx.h";
#include <iostream>;

using namespace std;

void MouseHandler::SetLocation(double x, double y){
    cout<<"SetLocation is preformed";
}

void MouseHandler::PreformClick(){
    cout<<"click is preformed";
}

De errors die ik krijg zijn dat MouseHandler in de mouseHandler.cpp een class of een namespace hoort te zijn, maar ik heb dat *** al gedefinieerd als een class.

Wat doe ik nou verkeerd?

  • Woy
  • Registratie: april 2000
  • Niet online

Woy

Moderator Devschuur®
Je moet niet MouseHandler.cpp includen maar MouseHandler.h.

De compiler heeft genoeg aan alleen de interface definitie, en de linker zal later de implementatie er bij zoeken.

Aangezien je nu alleen MouseHandler.cpp include, zal de compiler op dat moment niet weten wat de interface is van MouseHandler, en zal de implementatie dus voor de compiler ook nergens op slaan.

[Voor 35% gewijzigd door Woy op 26-10-2010 13:58]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • NMe
  • Registratie: februari 2004
  • Laatst online: 21:32

NMe

Quia Ego Sic Dico.

Woy schreef op dinsdag 26 oktober 2010 @ 13:57:
Je moet niet MouseHandler.cpp includen maar MouseHandler.h.
Mooie circular include ook als dit zou werken. 8)7 Ah wacht, ik kijk verkeerd. :P

offtopic:
"Perform" spel je niet zoals jij het tot drie keer toe doet. ;)

[Voor 5% gewijzigd door NMe op 26-10-2010 13:59]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Woy
  • Registratie: april 2000
  • Niet online

Woy

Moderator Devschuur®
overigens moet je in je header file ook een Include Guard opnemen, anders is de kans groot dat je binnen de kortste keren foutmeldingen krijgt over dubbele definitie van je class

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • BlackHawkDesign
  • Registratie: maart 2005
  • Laatst online: 20:27
Ja van die include guard was ik me bewust, wilde die gaan toevoegen zodra dit werkte :) Evengoed bedankt voor de tip :)

Oke aangepast, maar de error blijft:

Om exact te zijn:
error C2653: 'MouseHandler' : is not a class or namespace name mousehandler.cpp

[Voor 6% gewijzigd door BlackHawkDesign op 26-10-2010 14:18]


  • BlackHawkDesign
  • Registratie: maart 2005
  • Laatst online: 20:27
En opgelost.

Deze include #include "stdafx.h";

Moet bovenaan staan, de includes die hierboven staan, worden overgeslagen.

Wat een vage bug.

  • Woy
  • Registratie: april 2000
  • Niet online

Woy

Moderator Devschuur®
Niet echt een bug, maar expected behavior ;)
Wikipedia: Precompiled header

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • CodeCaster
  • Registratie: juni 2003
  • Niet online

CodeCaster

👌👀 good shit ✔💯

BlackHawkDesign schreef op dinsdag 26 oktober 2010 @ 14:30:
En opgelost.

Deze include #include "stdafx.h";

Moet bovenaan staan, de includes die hierboven staan, worden overgeslagen.

Wat een vage bug.
Visual C++ will not compile anything before the #include "stdafx.h" in the source file, unless the compile option /Yu'stdafx.h' is unchecked (by default); it assumes all code in the source up to and including that line is already compiled.
Met deze code:
C++:
1
2
#include "MouseHandler.h";
#include "stdafx.h"; 

Gaat de compiler er dus al van uit dat MouseHandler.h geprecompileerd is. Trouwens ook de tweede hit op Google.

Woy! :(

[Voor 14% gewijzigd door CodeCaster op 26-10-2010 14:37]

As always, we are nailed to a cross of our own construction.


  • BlackHawkDesign
  • Registratie: maart 2005
  • Laatst online: 20:27
True, ik had beter moeten zoeken. Maja bij een nieuwe taal is het altijd weer je weg vinden. Het is al moeilijk genoeg om de neiging te weerhouden om de nieuwe taal uit te schelden en weer terug te gaan naar een van je vertrouwde talen O-)
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee