【发布时间】:2022-02-21 01:34:06
【问题描述】:
我开始学习 C++ 中的 OOP。我尝试解决这样的任务:
创建一个类——一个基于千篇一律的整数数组的列表。分配构造函数、析构函数、将元素添加到列表顶部(末尾)、按编号从列表中选择元素、对列表进行排序、将列表元素显示到顶部和底部的功能列表。”
在delete函数中,编译器不断敲出同样的错误:
E0852 表达式必须是指向对象 My_4_Project C:\Users\artem\source\repos\Project4\My_4_Project\Source.cpp 的完整类型的指针
这是我的代码:
#include <iostream>
#include <algorithm>
using namespace std;
class Array {
private:
int* a;
unsigned int size;
int b, c = 0, d;
public:
Array();
Array(int s);
~Array();
int& operator[](int index);
void setarray();
void getarray();
void add();
void delet();
void sort();
};
Array::Array() {
size = 10;
a = new int[size];
for (size_t i = 0; i != size; i++) {
a[i] = 0;
}
}
Array::Array(int s) {
if (s > 0) {
size = s;
a = new int[size];
for (size_t i = 0; i != size; i++) {
a[i] = 0;
}
}
else cout << "Size can't be negativ";
}
Array::~Array() {
delete[]a;
}
int& Array::operator[](int index) {
if (index <= size) {
return a[index];
}
}
void Array::setarray() {
for (size_t i = 0; i != size; i++) {
cin >> a[i];
}
}
void Array::getarray() {
for (size_t i = 0; i != size; i++) {
cout << a[i] << " ";
}
}
void Array::add()
{
/* ? ? ? */ ;
}
void Array::delet() {
cin >> b;
for (int i = 0; i < size; i++)
{
if (b == a[i])
c++;
if (c > 2) delete a[i];
}
cout << c;
}
void Array::sort() {
int temp;
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < size; i++) {
cout << a[i] << " ";
}
}
int main() {
cout << "Enter 10 number`s massive: ";
Array arr(10);
arr.setarray();
cout << endl;
arr.getarray();
cout << endl;
cout << "Sorted massive: ";
arr.sort();
cout << endl;
cout << "Witch symbol you wanna delete?: ";
arr.delet();
return 0;
}
【问题讨论】:
-
您正在尝试删除
a[i],它的类型为int。这是不可能的,因为错误正确地指出,您只能删除指针。遗憾的是,从您有限的描述来看,我无法完全理解您想要在那里实现的目标,所以我真的无法提供进一步的帮助。 -
您不能从数组中删除元素。您可以将索引上方的所有元素向左移动一位并减小大小,但在这种情况下,您可能希望数组具有
size和capacity,其中size是活动元素的数量,容量为分配的元素数量。
标签: c++ arrays oop delete-operator