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

[C++]Kompilacja programu składającego się z kilku plików.

Ostatnio zmodyfikowano 2014-06-24 23:50
Autor Wiadomość
Harrel
Temat założony przez niniejszego użytkownika
[C++]Kompilacja programu składającego się z kilku plików.
» 2014-06-24 20:49:57
Witam, mam problem z kompilacją kilku plików. Wszystkie źródła podają, że w pliku głównym 'main.cpp' powinno dołączać się jedynie plik nagłówkowy (w moim przypadku 'deck.hpp'(czy pliki z rozsz. *.h i *.hpp różnią się w większym stopniu?)). Jednak dopóki nie dołączę pliku źródłowego ('deck.cpp') kompilator wyrzuca błąd - "undefined reference to 'deck::deck()'" - a właściwie to kilka takich samych błędów, tylko dotyczących innych metod używanych na klasie 'deck'.

Myślę, że kopiowanie całego pliku 'main.cpp' nie ma sensu więc wklejam tylko jego urywek.
C/C++
//main.cpp
#include <iostream>
#include <conio.h>
#include "deck.hpp"
//#include "deck.cpp"
#include "cards.hpp"  //z plikami 'cards' występuje dokładnie taki sam problem, ale chyba to znaczenia nie ma.
#include "cards.cpp"

using namespace std;


int main()
{
   
    deck talia;
    //...
    return 0;
}


C/C++
//deck.hpp
#ifndef DECK_HPP_
#define DECK_HPP_
#include "cards.hpp"



class deck
{
private:
    cards card[ 52 ];
public:
    deck();
    void shuffle();
    void get_in_order();;
    void show() const;
    deck operator =( deck & s );
};


#endif // DECK_HPP_

C/C++
//deck.cpp
#include "deck.hpp"
#include "cards.hpp"
//#include "cards.cpp"
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

deck deck::operator =( deck & s )
{
    for( int x = 0; x < 52; x++ )
    {
        card[ x ] = s.card[ x ];
    }
    return * this;
}
deck::deck()
{
    int amount = 0;
    for( int x = 1; x < 5; x++ )
    {
        for( int y = 1; y < 14; y++ )
        {
            cards temp = cards( y, x );
            card[ amount ] = temp;
            amount++;
        }
    }
}
void deck::show() const
{
    for( int x = 0; x < 52; x++ )
    {
        cout << card[ x ] << endl;
    }
   
}

void deck::shuffle()
{
    srand( time( NULL ) );
    cards card_copy[ 52 ];
    for( int x = 0; x < 52; x++ )
    {
        card_copy[ x ] = card[ x ];
        card[ x ] = 0;
    }
    int amount = 0;
    while( amount < 52 )
    {
        int los = rand() % 52;
        if( card[ los ] == 0 )
        {
            card[ los ] = card_copy[ amount ];
            amount++;
        }
    }
}
void deck::get_in_order()
{
    deck temp;
    ( * this ) = temp;
   
}

Jeśli to ma jakieś znaczenie to używam Code::Blocks 12.11, a pliki te oczywiście zostały utworzone jako jeden spójny projekt.
P-112660
DejaVu
» 2014-06-24 22:11:38
Pliki *.cpp nie powinny być include-owane. One powinny zostać dodane do projektu (analogicznie jak w projekcie jest plik main.cpp).
P-112665
Harrel
Temat założony przez niniejszego użytkownika
» 2014-06-24 22:25:24
Wszystkie pliki *.cpp są dodane do projektu, a mimo to jedynie zincludowanie ich zapewnia poprawną kompilację programu.
Gdy wcześniej tworzyłem inny projekt udało mi się go poprawnie skompilować, nie miał on jednak tylu plików jak ten z którym mam problem (posiadał tylko 3 pliki - main.cpp, source.cpp, headers.cpp). Więc może w tym sęk? Głowie się już nad tym dobre kilka godzin i szukam rozwiązania - niestety bez skutku. Z góry dziękuję za pomoc.
P-112672
Harrel
Temat założony przez niniejszego użytkownika
» 2014-06-24 23:50:46
Dobra już wszystko bangla. Wystarczyło zaznaczyć we właściwościach plików źródłowych opcje 'debug' i 'release', co pewnie oznaczało to dodanie do projektu o którym mówił DejaVu. Dzięki i sorki za zamieszanie. Zamykam.
P-112683
« 1 »
  Strona 1 z 1