Toon posts:

[C++] Compiler ziet CPP file niet.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • xehbit
  • Registratie: Februari 2009
  • Laatst online: 03-06 21:52
Hallo Tweakers,

Sindskort ben ik overgestapt van VisualStudio naar notepad++ en MinGW. Echter wanneer ik probeer te compilen word de test.cpp niet gevonden, en krijg ik dus een aantal fouten in mn compiler. Naar mijn weten hoefde je in de include's alleen de headers toe te voegen, de CPP files worden automatisch toegevoegd. (Correct me if i wrong).

Ik heb even een kleine voorbeeld code gemaakt. Omdat het totaal nutteloos is om mijn gehele source hier te plaatsen.

main.cpp
C++:
1
2
3
4
5
6
7
8
9
#include "main.h"

int main(int argc, char *argv[]) {
    TestCls test;
    test.printTekst();
    
    getchar();
    return 0;
}



main.h
C++:
1
2
3
4
5
6
7
8
9
#ifndef __H_MAIN
#define __H_MAIN

#include <stdio.h>
#include <iostream>

#include "test.h"

#endif



test.cpp
C++:
1
2
3
4
5
#include "test.h"

void TestCls::printTekst(){
    std::cout << "Tekst...";
}



test.h
C++:
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef __H_TEST
#define __H_TEST

#include <stdio.h>
#include <iostream>

class TestCls {
    public:
        void printTekst();
};

#endif


De compiler uitput
Kevin van der Burgt@LT_KEVIN /d/test/cpp
$ g++ main.cpp -o application.exe
main.cpp: In function 'int main(int, char**)':
main.cpp:4:2: error: 'TestCls' was not declared in this scope
main.cpp:4:10: error: expected ';' before 'test'
main.cpp:5:2: error: 'test' was not declared in this scope


Wanneer in in de main.cpp #include "test.cpp" bovenaanzet compiled de applicatie wel. Maar je hoort niet de .cpp files te includen naar mijn weten.

Acties:
  • 0Henk 'm!

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 17:14
Nou bij deze.

cpp files worden niet standaard toegevoegd zoals in visual studio. Je zal dus beide cpp files moeten noemen in de commandline van de compiler.
code:
1
$ gcc main.cpp test.cpp -o application.exe

of een makefile maken en make gebruiken.

Acties:
  • 0Henk 'm!

Anoniem: 180316

darkmage schreef op dinsdag 07 juni 2011 @ 19:57:
of een makefile maken en make gebruiken.
Of een van de andere miljoenen build tools die open-source beschikbaar zijn (zoals CMake en varianten).

Acties:
  • 0Henk 'm!

  • xehbit
  • Registratie: Februari 2009
  • Laatst online: 03-06 21:52
darkmage schreef op dinsdag 07 juni 2011 @ 19:57:
[...]

Nou bij deze.

cpp files worden niet standaard toegevoegd zoals in visual studio. Je zal dus beide cpp files moeten noemen in de commandline van de compiler.
code:
1
$ gcc main.cpp test.cpp -o application.exe
Yep! Werkt perfect! Thankyou.
darkmage schreef op dinsdag 07 juni 2011 @ 19:57:
of een makefile maken en make gebruiken.
Ik denk dat Make een stuk makkelijker is dan G++. Ben nu even aan het googlen hoe dat nou precies werkt :) Bedankt voor de tip!

Acties:
  • 0Henk 'm!

  • Anoniem: 395864
  • Registratie: Februari 2011
  • Niet online
Ik denk dat je je beter eerst even kunt verdiepen in de POSIX command line.

[Voor 2% gewijzigd door Woy op 07-06-2011 21:17]


Acties:
  • 0Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 00:37

Ventieldopje

I'm not your pal, mate!

Om je een schop in de goeie richting te geven .. autotools, automake, autoconf, libtool, m4, make -> google!

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0Henk 'm!

Anoniem: 180316

Dragon707 schreef op dinsdag 07 juni 2011 @ 20:21:

Ik denk dat Make een stuk makkelijker is dan G++. Ben nu even aan het googlen hoe dat nou precies werkt :) Bedankt voor de tip!
Make maakt (in jouw geval) gebruik van G++ ;).

Acties:
  • 0Henk 'm!

  • xehbit
  • Registratie: Februari 2009
  • Laatst online: 03-06 21:52
Anoniem: 395864 schreef op dinsdag 07 juni 2011 @ 20:29:
Ik denk dat je je beter eerst even kunt verdiepen in de POSIX command line. :')
Mooi, weer wat leesvoer. Altijd leuk om weer wat bij te leren!
Ventieldopje schreef op dinsdag 07 juni 2011 @ 20:33:
Om je een schop in de goeie richting te geven .. autotools, automake, autoconf, libtool, m4, make -> google!
Ziet er goed uit, maar het is denk ik toch leuker als je zelf je makefiles kan maken denk ik? Alleen zijn hier de meningen over verdeeld denk ik.
Anoniem: 180316 schreef op dinsdag 07 juni 2011 @ 20:38:
[...]


Make maakt (in jouw geval) gebruik van G++ ;).
Ja, heb het gevonden. Ik type gewoon MAKE in de shell en TADAAA!! :D

Acties:
  • 0Henk 'm!

Anoniem: 180316

Dragon707 schreef op dinsdag 07 juni 2011 @ 20:39:

Ziet er goed uit, maar het is denk ik toch leuker als je zelf je makefiles kan maken denk ik? Alleen zijn hier de meningen over verdeeld denk ik.
Als ik net 10 source en header files heb gehacked heb ik niet echt meer zin om nog een hele makefile erbij te doen (hoe simpel ze ook kunnen zijn). Voor kleinere projecten is het inderdaad wel handig :).

Acties:
  • 0Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01-06 19:49
Ik zou maar niet met de autotools beginnen voor je de onderliggende technologie (Makefiles and de m4 macro processor) goed kent. ;) Sowieso werken de autotools het beste in een POSIX-omgeving; je kunt met msys onder Windows wel een eind komen, maar het is niet ideaal. Dan zou ik nog eerder CMake aanraden.
Anoniem: 180316 schreef op dinsdag 07 juni 2011 @ 20:41:
Als ik net 10 source en header files heb gehacked heb ik niet echt meer zin om nog een hele makefile erbij te doen (hoe simpel ze ook kunnen zijn). Voor kleinere projecten is het inderdaad wel handig :).
Dat is natuurlijk een non-argument; het kost nauwelijks moeite om sources aan een Makefile toe te voegen; op die manier gaat de overhead van het bijhouden van de Makefile alleen maar omlaag naar mate je project groter wordt, want een Makefile voor een project met 10 source files kost niet 10x zo veel werk om te maken dan eentje voor een project één source file.

Acties:
  • 0Henk 'm!

Anoniem: 180316

Soultaker schreef op dinsdag 07 juni 2011 @ 20:56:
[...]

Dat is natuurlijk een non-argument; het kost nauwelijks moeite om sources aan een Makefile toe te voegen; op die manier gaat de overhead van het bijhouden van de Makefile alleen maar omlaag naar mate je project groter wordt, want een Makefile voor een project met 10 source files kost niet 10x zo veel werk om te maken dan eentje voor een project één source file.
Nee, maar als er dan nog geen is (ik schrijf altijd eerst de source en dan pas de Makefile, in het begin that is)...

[Voor 20% gewijzigd door Anoniem: 180316 op 07-06-2011 23:00]


Acties:
  • 0Henk 'm!

  • Anoniem: 395864
  • Registratie: Februari 2011
  • Niet online
Modbreak:Mensen op deze manier afkraken is niet nodig, en al helemaal niet als je verder niks toe te voegen hebt

[Voor 88% gewijzigd door Woy op 07-06-2011 21:22]


Acties:
  • 0Henk 'm!

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

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Ik weet niet hoor, maar de compile errors die je in je topicstart geeft komen totaal niet overeen met je omschrijving. Ik verwacht linker errors, maar hij klaagt dat hij de declaratie van TestCls niet kan vinden. test.h wordt gewoon geïncluded vanuit main.cpp, en het al dan niet opgeven van test.cpp bij het aanroepen van de compiler is irrelevant.

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 04-06 22:06
Heb zo'n vermoeden dat main.cpp een andere test.h include dan test.cpp.

Overigens heten de standaard C headers in C++ allemaal c<naam> zonder .h, dus niet:
C++:
1
#include <stdio.h>


maar

C++:
1
#include <cstdio>

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.


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

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

En als we dan toch opbouwende kritiek aan het leveren zijn: waarom includet je al die headers in test.h en main.h? Er is geen enkele declaratie in de header die ze nodig heeft. Een header bestaat vooral zodat ándere sourcefiles de definities in de bij de header horende sourcefile kunnen gebruiken. Main.cpp is helemaal niet geïnteresseerd in het feit dat de implementatie van TestCls iostream en cstdio nodig heeft, dus horen die dingen ook niet in test.h

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee