kompilacja rozłączna (C++)

0

Witam. mam jedną prośbę.(w związku z tym że mam samouczkę Stephena Prata). Mam cały czas
problemy(nie radze kupić z Heliona szkoła programowania C++ wydanie V) . Więc doSZEDŁem do rozdziału 9.i niejak nie mogę poradzić sobie z zasadamy kompilacji rozłącznej. np. Wpisuje najprostszy projekt który posiada 3 pliki oddzielnie nie działa.w SPACJA końcu takie przykłady co są tu(w książce) przepisałem
co do literki,i jest błąd. i to u mnie nie jest pierwszy raz. i zawsze w forum znajduje odpowiedzi i długopisem normalnie poprawiam w książce. Mam nadzieje że i tym razem koledzy pomogą. więc bardzo bym prosił o jakiś taki program składający się z 3 plików źródłowych. bez objaśnień bez niczego,aby był działający. Resztę poradzę sobie w zrozumieniu.(najlepiej po polsku).
Albo jakiś link na ten temat ze szczegółami.
Pozdrawiam i bardzo dziękuje. ;-)

0

no dobra. no to masz projekt, w którym są pliki:

  1. items (cpp i h)
  2. mobs (cpp i h) - korzystające z items
  3. main (cpp) - korzystający z items i mobs

projekt jest prosty, ale ma to, co najważniejsze: deklaracje zmiennych (z extern), funkcji i klas. Ma nawet zmienną łączoną statycznie.

items.h

#ifndef ITEMS_H
#define ITEMS_H

#include <string>

using namespace std;

//---------------------------------------------

class Item {
    public:
       string name;
       int value;

       Item(string n, int v);
       void show();
    };

//---------------------------------------------

const static int itemsCount = 4;
extern Item items[itemsCount];

void showItems();

#endif

items.cpp

#include "items.h"

#include <iostream>

using namespace std;

//---------------------------------------------

Item items[itemsCount] = {
    Item("miecz",12),
    Item("tarcza",16),
    Item("diament",1000),
    Item("róża",1)
    };

//---------------------------------------------

Item::Item(string n, int v) {
    name = n;
    value = v;
    }

void Item::show() {
    cout << "    " << name << " (" << value << ")" << endl;
    }


void showItems() {
    cout << "Dostępne przedmioty:" << endl;
    for(int i=0; i<itemsCount; i++) 
        items[i].show();
    };

mobs.h

#ifndef MOBS_H
#define MOBS_H

#include "items.h"
#include <vector>

//---------------------------------------------

class Mob {
    public:
       string name;
       int level;
       std::vector<int> inventory;

       Mob(string n, int l);
       void show();
    };

//---------------------------------------------

extern Mob player;

#endif

mobs.cpp

#include "mobs.h"

#include <iostream>

using namespace std;

//---------------------------------------------

Mob player("gracz",1);

//---------------------------------------------

Mob::Mob(string n, int l) {
    name = n;
    level = l;
    }

void Mob::show() {
    cout << name << " (poziom " << level << ")" << endl;
    cout << "Ekwipunek:" << endl;
    for(int i=0; i<inventory.size(); i++)
        items[inventory[i]].show();
    }

main.cpp

#include <iostream>
#include <cstdlib>

#include "mobs.h"
#include "items.h"

using namespace std;

int main(int argc, char *argv[])
{
    player.inventory.push_back(1);
    player.inventory.push_back(2);

    int choice = 0;
    do {
       
        cout << "----------------------" << endl
             << "0. wyjście" << endl
             << "1. informacje o graczu" << endl
             << "2. lista przedmiotów" << endl;

        choice = 0;     
        cin >> choice; 

        switch(choice) {
           case 1: 
               player.show(); 
               break;
           case 2:
               showItems();
               break;
           default:
               cout << "błąd!" << endl;
               choice = 0;
        };
    } while(choice != 0);

    
    system("pause");
    return EXIT_SUCCESS;
}
0

Dzięki Ranides. Właśnie o to mi chodziło,tyle że nie pozwoliłem sobie za dużo prosić.
To za 2 godziny już będzie przylepiony do mojego mózgu. :-D

1 użytkowników online, w tym zalogowanych: 0, gości: 1