Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Troche niejasne zrozumienie dzielenie pliku.

Ostatnio zmodyfikowano 2012-06-10 12:18
Autor Wiadomość
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 :
C/C++
//Plik Position2D.cpp

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 :
C/C++
//Plik main.cpp

#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 :
C/C++
Kwadrat::Kwadrat kw( 20.2 );

trochę nie rozumiem, bo mogę też dać tak :
C/C++
Kwadrat kw( 20.2 );

kompilator traktuje to jak jeden plik czy co ? :D


p.s : Czytałem ten artykuł : » Kurs C++Dzielenie kodu na kilka plików źródłowych lekcja

p.s2 : miałem z nim trochę problemy
P-58143
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.
P-58147
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 ...

P-58151
xevuel
» 2012-06-10 11:19:42
Podstawy... Poczytaj o:
  • Nazewnictwie plików pod danym OS'em i dodawaniu rozszerzeń do tychże plików
  • Dodawaniu plików *.cpp do projektu
  • Czym są pliki nagłówkowe

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 :)
P-58155
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:
C/C++
#ifndef PLIK_H_INCLUDED
#define PLIK_H_INCLUDED

#include <iostream>

void funkcja();

#endif // PLIK_H_INCLUDED

Następnie tworzysz plik o nazwie "plik.cpp" w którym umieszczasz definicje:
C/C++
#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():
C/C++
#include "plik.h"

int main()
{
    funkcja();
   
    return 0;
}
P-58156
tomcionek15
Temat założony przez niniejszego użytkownika
» 2012-06-10 11:56:04
Dobra, zrobiłem ze strukturą i błąd :
C/C++
//Plik Position2D.cpp

#include <iostream>
#include "Position2D.h"

struct Position2D {
    int x, y;
};

class Kwadrat {
private:
    int punkty;
   
public:
   
   
};
dalej :
C/C++
//Plik main.cpp

#include <iostream>
#include "Position2D.h"

using namespace std;

int main()
{
    Position2D gracz;
   
    return 0;
}
i ten :
C/C++
//Plik Position2D.h

#ifndef POSITION2D_H_INCLUDED
#define POSITION2D_H_INCLUDED

struct Position2D;

#endif // POSITION2D_H_INCLUDED

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
C/C++
//Plik Position2D.h

#ifndef POSITION2D_H_INCLUDED
#define POSITION2D_H_INCLUDED

struct Position2D {
    int x, y;
};

#endif // POSITION2D_H_INCLUDED

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

P-58161
xevuel
» 2012-06-10 12:09:02
Jak dasz
C/C++
struct Position2D {
    int x, y;
};
 do pliku .h to usuń go z .cpp. O tym mówi słowo
redefinition
 :)
P-58162
SeaMonster131
» 2012-06-10 12:13:24
plik.h:
C/C++
class CKlasa
{
    int x, y, blabla;
   
public:
    void funkcja();
};


plik.cpp:
C/C++
#include "plik.h"

void CKlasa::funkcja()
{
    // do sth
}
P-58163
« 1 » 2
  Strona 1 z 2 Następna strona