Помощь Установка / Построение Статического Размера Массива в Классах и Объектах в C ++ - PullRequest
1 голос
/ 22 июня 2011

У меня есть домашнее задание, я думал, что это было просто, и я могу сделать это, не используя классы / объекты, но я думаю, я просто недостаточно хорошо понимаю классы / объекты, чтобы выполнить его так, как мой учитель просит меня сделать. 1001 *

Все это будет сделано с массивом целых чисел, длина которого всегда будет 20.

Назначение вызовов для 3 отдельных файлов:

1 заголовочный файл, book.h , содержащий элементы класса / функции-члены / прототипы) 1 .cpp файл, содержащий все функции-члены. Для этого я просто включу один пример (1 файл .cpp, который просто содержит int main и действует как то, что пользователь видит как интерфейс и вызывает функции-члены и т. Д.

//book.h
class Shelf{
public:
Shelf();
void insert(int);
int bookshelf[];
};

Теперь book.cpp, который содержит функции-члены (я действительно не знаю, нужен ли мне такой конструктор и могу ли я назвать массив тем же именем, что и массив в book.h?)

//book.cpp
#include <iostream>  
#include "book.h"
const int shelfSize=20;

Shelf::Shelf(){
    bookshelf[shelfSize];
    for(int i=0; i <shelfSize; i++)
    bookshelf[i]=0;
}
//inserts a book to the end of the list
void Shelf::insert(int booknum){
    for(int i=0; i < shelfSize; i++)
    bookshelf[i] = booknum;
}

Теперь book_main.cpp , который просто должен дать меню и запросить у пользователя:

//book_main.cpp
#include<iostream>

using namespace std;

#include "book.h"

int main(){

Shelf book; //creates a Shelf object named "book"
int isbn=0;
cout<<"Enter ISBN: "<<endl;
cin>>isbn;
book.insert(isbn);
return 0;
}

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

1) Как мне настроить массив в моем объекте, функциях-членах и т. Д.? Я предполагаю, что мой дизайн функций ужасен, так же как неверное имя массива в файле, который содержит все функции-члены и т. Д. Любой совет будет оценен. Эта программа компилируется, но вылетает каждый раз, когда я вызываю book.insert ()

Ответы [ 2 ]

4 голосов
/ 22 июня 2011

Попробуйте это:

//book.h
class Shelf{
public:
    static const int shelfSize = 20;
    Shelf();
    void insert(int);
    int bookshelf[shelfSize];
};

(Вам нужно удалить строку bookshelf[shelfSize]; из вашего конструктора.)

Ваш конструктор может быть упрощен за счет использования списков инициализаторов :

Shelf::Shelf()
  : bookshelf()  // This initializes all elements to zero
{}

Ваша логика insert() не имеет большого смысла; вам нужно будет отслеживать, сколько элементов вы уже вставили, чтобы вы знали, куда поместить следующий.

Также рассмотрите возможность использования std::vector вместо необработанного массива в стиле C. Они избегают нескольких проблем, таких как нехватка места!

1 голос
/ 22 июня 2011

bookshelf нет места. ваше определение не определяется размером.

//book.h
#define shelfSize 20

class Shelf{
public:
    Shelf();
    void insert(int);
    int bookshelf[shelfSize];
};

и использование book.h

//book.cpp
#include <iostream>  
#include "book.h"

Shelf::Shelf(){
    for(int i=0; i <shelfSize; i++)
        bookshelf[i]=0;
}

//inserts a book to the end of the list
void Shelf::insert(int booknum){
    for(int i=0; i < shelfSize; i++)
        bookshelf[i] = booknum;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...