tomcionek15 Temat założony przez niniejszego użytkownika |
Troche niejasne zrozumienie dzielenie pliku. » 2012-06-09 21:18:33 Witam, uczę się C++, w końcu chcę się nauczyć dzielenia plików no to na razie zrobiłem tak :
struct Position { int x, y; };
class Kwadrat { private: double bok; public: Kwadrat( double bok_ ) { bok = bok_; } void setBok( double bok_ ) { bok = bok_; } double getBok() { return bok; } double obliczPole() { return bok * bok; } double obliczObwod() { return bok * 4; } };
i ten :
#include <iostream> #include "Position2D.cpp"
using namespace std;
int main() { Kwadrat::Kwadrat kw( 20.2 ); cout << "Pole : " << kw.obliczPole() << " Obwod : " << kw.obliczObwod() << endl; return 0; }
No i wszystko działa, więc czy muszę jeszcze robić plik nagłówkowy *.h czy to jest obowiązkowe ? Aha, i jeszcze jedno w pliku main.cpp jest : Kwadrat::Kwadrat kw( 20.2 );
trochę nie rozumiem, bo mogę też dać tak : kompilator traktuje to jak jeden plik czy co ? :D p.s : Czytałem ten artykuł : Dzielenie kodu na kilka plików źródłowychp.s2 : miałem z nim trochę problemy |
|
xevuel |
» 2012-06-09 21:58:57 Jak działa, nie musisz. Chciałbym tylko zaznaczyć, że dyrektywy #include używa się do plików *.h/*.hpp, a nie do *.cpp. Pliki *.cpp dodajemy do projektu, a plik *.h jest tak jakby łącznikiem pomiędzy tymi dwoma plikami. //edit: kompilator traktuje to jak jeden plik czy co ? :D |
Przez to, że zaincludowałeś plik *.cpp, tak. Gdybyś dodał go do projektu, nie. |
|
tomcionek15 Temat założony przez niniejszego użytkownika |
» 2012-06-10 10:36:18 Ja właśnie stworzyłem projekt i jak dałem : #include "Position2D" to nie działa a jak dodałem końcówkę .cpp to działa :D ... |
|
xevuel |
» 2012-06-10 11:19:42 Podstawy... Poczytaj o: p.s2 : miałem z nim trochę problemy |
Powiedz czego nie zrozumiałeś, to ja, albo ktoś bardziej doświadczony postaramy ci się pomóc :) |
|
SeaMonster131 |
» 2012-06-10 11:20:57 Bo istnieje taki plik jak Position2D.cpp a nie Position2D. Masz projekt. Tworzysz plik o nazwie "plik.h" w którym umieszczasz tylko deklaracje: #ifndef PLIK_H_INCLUDED #define PLIK_H_INCLUDED
#include <iostream>
void funkcja();
#endif
Następnie tworzysz plik o nazwie "plik.cpp" w którym umieszczasz definicje: #include "plik.h"
void funkcja() { std::cout << "FUNKCJA"; }
I już w innych plikach, np w main.cpp includujesz plik "plik.h" i możesz korzystać z funkcja(): #include "plik.h"
int main() { funkcja(); return 0; }
|
|
tomcionek15 Temat założony przez niniejszego użytkownika |
» 2012-06-10 11:56:04 Dobra, zrobiłem ze strukturą i błąd :
#include <iostream> #include "Position2D.h"
struct Position2D { int x, y; };
class Kwadrat { private: int punkty; public: };
dalej :
#include <iostream> #include "Position2D.h"
using namespace std;
int main() { Position2D gracz; return 0; }
i ten :
#ifndef POSITION2D_H_INCLUDED #define POSITION2D_H_INCLUDED
struct Position2D;
#endif
błąd w pliku main.cpp \main.cpp||In function 'int main()':| \main.cpp|10|error: aggregate 'Position2D gracz' has incomplete type and cannot be defined| \main.cpp|10|warning: unused variable 'gracz'| ||=== Build finished: 1 errors, 1 warnings ===|
ok czyli problem polega w Position2D w pliku Position2D.h no to daje tak w tym pliku Position2D.h
#ifndef POSITION2D_H_INCLUDED #define POSITION2D_H_INCLUDED
struct Position2D { int x, y; };
#endif
errory : \main.cpp||In function 'int main()':| \main.cpp|10|warning: unused variable 'gracz'| \Position2D.cpp|6|error: redefinition of 'struct Position2D'| \Position2D.h|6|error: previous definition of 'struct Position2D'| ||=== Build finished: 2 errors, 1 warnings ===|
I teraz jak z pliku Position2D.cpp usunę strukturę to normalnie się kompiluje i działa ... takie mam problemy ;d |
|
xevuel |
» 2012-06-10 12:09:02 Jak dasz struct Position2D { int x, y; }; do pliku .h to usuń go z .cpp. O tym mówi słowo redefinition :) |
|
SeaMonster131 |
» 2012-06-10 12:13:24 plik.h: class CKlasa { int x, y, blabla; public: void funkcja(); };
plik.cpp: #include "plik.h"
void CKlasa::funkcja() { }
|
|
« 1 » 2 |