在类中需要2d数组的帮助(C ++)

时间:2018-09-07 13:35:39

标签: c++ arrays class pointers heap-memory

在这种情况下,我想删除书籍,但是我尝试声明此代码,但它不起作用。

SELECT id, name, height 
FROM main_table 
WHERE id = 1

UNION 

SELECT main_table_id as id, name, height 
FROM child_table 
WHERE main_table_id = 1

2 个答案:

答案 0 :(得分:3)

在删除之前,需要先添加权限。

除了Jeffrey所说的以外,您的Add函数可能由于“一人一失”错误而无法正常工作。在第一个电话中,您将有books = new Book*[0];。分配大小为零的数组是合法的(请参见here),但是您将无法在其中存储任何内容。

如果您可以使用std::vector,它将使您的代码更加简单,并且不易出错。

class Library {
private:
    std::vector<Book> books;
    // no need for counter, std::vector has size()
public:
    // no need for a constructor, the default constructor
    // will correctly construct 'books'
    void Add(INPUT &tmp) {
        // not sure how you convert 'INPUT' to 'Book'
        books.push_back(tmp);
        // this handles all of the memory management for you
    }
    void Delete() {
        // you need to ensure that books is not empty
        books.pop_back();
    }
    int getCounter() {
        return books.size();
    }
    // no need for a destructor, the default one will
    // do everything
};

如果需要二维,则代码类似,但是将使用向量vector。

答案 1 :(得分:1)

Book **books; 

是指向书的指针。这是一种旧的方式,它具有一本书的列表(作为指针)或一本书的列表。

Library() {
    books = NULL;
    counter = 0;
}

这将创建一个空库。没有书。

void Add(INPUT &tmp) {
    books = new Book*[counter];
    ++counter;
}

首先要注意的是您没有使用tmp书。因此,如果不使用它,您可能无法成功将其存储在任何地方。

第二件事是books = new Book*[counter];分配了一个图书库。用于存储一些书的空间。您可能应该在构造函数中执行此操作。如果在该处这样做,每次尝试添加一本书时,都会丢失所有其他书籍,并且还会泄漏内存。

这里有两种可能性。您有一位C ++的老教授,您将需要学习有关指针和指向该指针的指针,以及新的删除方法。或者您可以了解std :: vector和智能指针。这是一个更好的主意,但我无法告诉您在您的班级中它会收到多好。

另外,请说明输入定义为什么。