[C++] Compiler ziet CPP file niet.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • xehbit
  • Registratie: Februari 2009
  • Laatst online: 26-08 22:19
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:
  • 0 Henk 'm!

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 13:39
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:
  • 0 Henk 'm!

Verwijderd

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:
  • 0 Henk 'm!

  • xehbit
  • Registratie: Februari 2009
  • Laatst online: 26-08 22:19
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:
  • 0 Henk 'm!

Verwijderd

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:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19-09 11:00

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:
  • 0 Henk 'm!

Verwijderd

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:
  • 0 Henk 'm!

  • xehbit
  • Registratie: Februari 2009
  • Laatst online: 26-08 22:19
Verwijderd 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.
Verwijderd 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:
  • 0 Henk 'm!

Verwijderd

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:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
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.
Verwijderd 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:
  • 0 Henk 'm!

Verwijderd

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 Verwijderd op 07-06-2011 23:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

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:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

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.

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.


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 15:26
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.


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

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

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.

Pagina: 1