在这种情况下,我想删除书籍,但是我尝试声明此代码,但它不起作用。
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
答案 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和智能指针。这是一个更好的主意,但我无法告诉您在您的班级中它会收到多好。
另外,请说明输入定义为什么。