Member 13429574 Ответов: 2

C++ не уверен, как использовать один класс в качестве переменной в другом классе


- Привет!
Итак, мое задание состоит в том, чтобы сделать опись книг из файла, который читается программой и помещается в связанный список. Все классы, члены, конструкторы и функции, рассмотренные ниже, должны быть в программе. Единственное добавленное, что я добавляю, это

Date(unsigned int, unsigned int, unsigned int);


Что я уже пробовал:

Ошибка, которую я получаю, просто говорит: "предупреждение: неиспользуемая переменная "опубликована".

Я не думаю, что использую
Date *published
правильно в
class Book
. Я попытался сделать структуру в
class Date
из переменных там, но это, казалось,только усугубляло мои проблемы.

Я был бы признателен за любой толчок в правильном направлении. Спасибо! Во имя экономии места я опустил некоторые вещи, которые, как мне кажется, работают нормально, но я могу добавить их сюда, если это будет полезно.

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

class Date{
public:
    unsigned int day;
    unsigned int month;
    unsigned int year;
    Date(void);
    Date(unsigned int, unsigned int, unsigned int);
    ~Date(void);
};

Date::Date(void){
    day = 0;
    month = 0;
    year = 0;
}

Date::Date(unsigned int day, unsigned int month, unsigned int year){
    day = day;
    month = month;
    year = year;
}

Date::~Date(void){
}

class Book{
public:
    string title;
    string author;
    Date *published;
    string publisher;
    float price;
    string isbn;
    unsigned int pages;
    unsigned int copies;
    Book(void);
    Book(string, string, Date, string, float, string, unsigned int, unsigned int );
    ~Book(void);
};

Book::Book(void){
    title = "";
    author = "";
    Date *published = NULL;
    publisher = "";
    price = 0;
    isbn = "";
    pages = 0;
    copies = 0;
}

Book::Book( string title, string author, Date published, string publisher,
           float price, string isbn, unsigned int pages, unsigned int copies){
    title = title;
    author = author;
    published = published;
    publisher = publisher;
    price = price;
    isbn = isbn;
    pages = pages;
    copies = copies;
}



void LinkedList::print_list(void){
    Node *temp = head;
    while( temp != NULL ){
        cout << temp->book->title << endl;
        cout << temp->book->author << endl;
        cout << temp->book->published << endl;
        cout << temp->book->publisher << endl;
        cout << temp->book->price << endl;
        cout << temp->book->isbn << endl;
        cout << temp->book->pages << endl;
        cout << temp->book->copies << endl;
        temp = temp->next;
        cout << endl;
    }
}



int main()
{
    LinkedList myList;
    ifstream myfile("booklist.txt");

    string title;
    string author;
    Date published;
    string publisher;
    float price;
    string isbn;
    unsigned int pages;
    unsigned int copies;

    while( myfile ){
        myList.insert_front( new Book(title, author, published, publisher,
                                      price, isbn, pages, copies));

        myfile >> title;
        myfile >> author;
        myfile >> publisher;
        myfile >> price;
        myfile >> isbn;
        myfile >> pages;
        myfile >> copies;
    }

    myList.print_list();

    return 0;
}

2 Ответов

Рейтинг:
1

chaau

Не используйте указатель для вашего простого класса Date Указатель необходим, когда ваш класс либо имеет большие данные (копирование больших данных снижает производительность), либо имеет некоторые элементы, которые не могут быть легко скопированы (например, класс для подключения к базе данных, файловые или сетевые операции и т. д.). Итак, в вашем случае вы можете использовать дату как есть:

class Book{
public:
    string title;
    string author;
    Date published;
    string publisher;
    float price;
    string isbn;
    unsigned int pages;
    unsigned int copies;
    Book(void);
    Book(string, string, Date, string, float, string, unsigned int, unsigned int );
    ~Book(void);
};


Рейтинг:
1

CPallini

Цитата:
Книга:: Книга (пустота){
заглавие = "";
автор = "";
Дата *опубликовано = нуль; // <------------ жучок здесь
издатель = "";
Цена = 0;
номер ISBN = "";
страниц = 0;
копии = 0;
}

В то время как ошибка находится в приведенном выше коде, где вы должны написать вместо этого
published = NULL;

или еще лучше
published = nullptr;


Я второй Андрей Чередник по его предложению: не используйте указатель для Date член.