Błąd przy kompilacji. Błąd error LNK2001.

0

Jestem dopiero nowicjuszem w kwestii programowania(dopiero zacząłem uczyć się klas), jednakże mam problem z kompilacją kodu z powodu błędu: error LNK2001: unresolved external symbol "class ksiazka * ksiazki" ([email protected]@[email protected]@A). Podzieliłem swój program na 5 plików:

main.cpp


#include <iostream>
#include <conio.h>
#include <string>

#include "klasa.h"
#include "main.h"

void main()
{
    ksiazka ksiazki[20];

    for(;;)
    {
        int Wybor;
    system("cls");
    std::cout << "Menu:" << std::endl;
    std::cout << "-------------------------------------" <<  std::endl;
    std::cout << "1. Dodaj ksiazke do bazy danych" << std::endl; 
    std::cout << "2. Czytaj ksiazkę z bazy danych" << std::endl;
    std::cout << "3. Wyswietl ksiazki, bedace w bazie danych" << std::endl;
    std::cout << "0. Wyjscie" << std::endl;

    switch(Wybor)
    {
        case 1 : Dodawanie(); break;
        case 2 : Czytanie(); break;
        case 3 : PokazBaze(); break;
        case 0 : break; break;

        default:
        {
            std::cout << "Nieznana opcja!" << std::endl;
        }
    }
    }
    _getch();
}

main.h

#include<string>
#include "klasa.h"
struct wpisywanaksiazka
{
    std::string tytul;
    std::string autor;
    std::string ISBN;
    int iloscstron;
    int iloscwersow;
};

extern ksiazka ksiazki[20];

bool Dodawanie();
bool Czytanie();
bool PokazBaze();

funkcje.cpp


#include <iostream>
#include <conio.h>
#include <string>
#include "main.h"
#include "klasa.h"

bool Dodawanie()
{
    system("cls");
    wpisywanaksiazka wpisana;
    std::cout << "Podaj tytuł książki: ";
    std::cin >> wpisana.tytul;
    std::cout << std::endl;

    std::cout << "Podaj autora książki: ";
    std::cin >> wpisana.autor;
    std::cout << std::endl;

    std::cout << "Podaj ISBN książki: ";
    std::cin >> wpisana.ISBN;
    std::cout << std::endl;

    std::cout << "Podaj ilosc stron książki: ";
    std::cin >> wpisana.iloscstron;
    std::cout << std::endl;

    std::cout << "Podaj ilos wersow na stronie: ";
    std::cin >> wpisana.iloscwersow;
    std::cout << std::endl;

    for(int i = 0; i < 20; i++)
    {
        if(ksiazki[i].tytul.length() == 0)
        {
            ksiazki[i].tytul = wpisana.tytul; 
            ksiazki[i].autor = wpisana.autor; 
            ksiazki[i].ISBN = wpisana.ISBN; 
            ksiazki[i].iloscstron = wpisana.iloscstron; 
            ksiazki[i].iloscwersow = wpisana.iloscwersow; 
            std::cout << "Wpisanie do bazy danych powiodło sie. Numer w bazie danych to:" << (i+1) << std::endl;
            _getch();
            return true;
        }
        else
            {
                if( i == 19)
                {
                    std::cout << "Brak miejsca w bazie danych. Nie mozna wpisac ksiazki." << std::endl;
                    return false;
                }

            }
    }
}

bool PokazBaze()
{
    system("cls");
    std::cout << "Lp. Tytul Autor ISBN" << std::endl;
    for (int i = 0; i <  20; i++)
    {
        std::cout << (i+1) << ". " << ksiazki[i].tytul << " " << ksiazki[i].autor << " " << ksiazki[i].ISBN << std::endl;
    }
    _getch();
    return true;
}

bool Czytanie()
{
    return true;
}

klasa.h

#include<string>
#pragma once

class ksiazka
{
public:
    std::string tytul;
    std::string autor;
    std::string ISBN;
    unsigned iloscstron;
    unsigned iloscwersow;
    unsigned obecnastrona;
    unsigned obecnywers;

public:
    std::string pokaztytul();
    std::string pokazautora();
    std::string pokazISBN();
    int nastepnastrona();
    int nastepnywers();
    int przejsciedostr();
    ksiazka();
};

extern ksiazka ksiazki[20];

klasa.cpp


#include <string>
#include <iostream>
#include <conio.h>

#include "klasa.h"
#include "main.h"

std::string ksiazka::pokaztytul()
{
    return tytul;
}

std::string ksiazka::pokazautora()
{
    return autor;
}

std::string ksiazka::pokazISBN()
{
    return ISBN;
}

int ksiazka::nastepnastrona()
{
    if (obecnastrona == iloscstron)
    {
        std::cout << "To jest ostatnia strona nie mozna przejsc dalej." << std::endl;
    }

    else
    {
        obecnastrona++;
    }
    return 0;
}

int ksiazka::nastepnywers()
{
    if (obecnywers == iloscwersow)
    {
        obecnastrona++;
    }

    else
    {
        obecnywers++;
    }
    return 0;
}

int ksiazka::przejsciedostr()
{
    int strona = 4;
    for(;;)
    {

    if(strona > 0 && strona < iloscstron)
    {
        obecnastrona = strona;
        break;
    }
    else
    {
        std::cout << "To nie jest poprawny numer strony. Podaj prawidlowy numer strony."<<std::endl;
    }
    }
    return 0;
}

ksiazka::ksiazka()
{
    obecnastrona = 1;
    obecnywers = 1;

}

Nie wiem w czym tkwi problem, więć byłbym kontent jeśli ktoś by mi pomógł.

0

Do pliku cpp dodaj:
ksiazka ksiazki[20];
Lepiej nie używać zmiennych globalnych - kod jest źle napisany.

0

Czy mógłbyś napisać do którego dokładnie pliku i w którym miejscu mam dopisać podana frazę? I jakie błędy jeszcze popełniłem przy pisaniu kodu?

0

Czy mógłbyś napisać do którego dokładnie pliku i w którym miejscu mam dopisać podana frazę?

Lepiej nie używać zmiennych globalnych - kod jest źle napisany.

Najlepiej nigdzie.

Tablicę deklaruj lokalnie i przekazuj w argumentach.

2

zadnych tablic!

uzyj std::vector

0

@fasadin
Użyłem tablicy, bo nie wiedziałem jak zrobić ją zrobić samorozszerzalną.

0

"Użyłem tablicy, bo nie wiedziałem jak zrobić ją zrobić samorozszerzalną."

bo ona nie jest samorozszerzalna. To zdanie jakos nie ma za duzo sensu. Zapoznaj sie z std::vector

0

Chodziło mi o to, że wiem że ta tablica jest zdefiniowana jako o stałej ilości obiektów. Jednakże gdybym umiał to zrobiłbym tą tablicę, jako taką, która w zależności od tego ile książek jest dodanych taką wielkość ma.

2

ostatni raz napisze, uzyj std::vector.

Jezeli bardzo chcesz na tablicy to musisz napisac... swoj wlasny std::vector. Czyli musisz napisac klase ktora bedzie pamietala ile obiektow zostalo dodane do tablicy i jak duza tablica jest. Gdy bedzie potrzeba dodac kolejny obiekt do tablicy i sie do niej nie zmiesci, to musisz przepisac wszystkie obiekty do wiekszej tablicy i zwolnic pamiec starej tablicy

0

Ok dobra dzięki za wszelką pomoc i twój czas.

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