以下是我最新作业的当前代码,我无法弄清楚打印数组的问题是什么。请原谅我糟糕的代码,在我的课堂上我们被扔进了C ++,我们之前没有人曾经使用它,所以这可能是一个简单的错误,但是家里没有人可以帮助我。
标题文件DynamicArray.h
:
//
// DynamicArray.h
///#include <rpcndr.h>
#ifndef DYNAMIC_DYNAMICARRAY_H
#define DYNAMIC_DYNAMICARRAY_H
#endif //DYNAMIC_DYNAMICARRAY_H
// union
// intersection
// relative complement
// insertion - if the element is already in the set, then nothing happens
// deletion - if the element is not in the set, then nothing happens
// query to check whether an element is in a set
// query to find the number of number of elements in a set
// display the set
//destructor
// copy constructor
// ***********************************overloading assignment operator***************************************************
class DynamicArray{
public:
DynamicArray(int size);
DynamicArray(const DynamicArray &original, int Size);
/// DynamicArray(int Size);
~DynamicArray();
void Union();
void Intersection();
void Complement();
int Insert(int position, int entry, int size);
int Delete(int position, int entry, int size);
bool Qelement(int size, int entry);
int Qset(int size);
int size = 20;
int *array;
};
//
//
//
源文件DynamicA.cpp
- 这里我定义了构造函数和成员函数:
//
// DynamicA.cpp
//
//Union();
//Intersection();
//Complement();
//Insert();
//Delete();
//Qelement();
//Qset();
#include <iostream>
#include "DynamicArray.h"
using namespace std;
DynamicArray::DynamicArray(int &size = 30){
size = 20;
*array = new int[size];
for(int i = 0; i < size; i++){
array[i] = 0;
};
}
/// DynamicArray::DynamicArray(int Size) {
///
/// }
DynamicArray::DynamicArray(const DynamicArray &original, int size) {
size = original.size;
array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = original.array[i];
}
}
DynamicArray::~DynamicArray(){
delete[] array;
}
void DynamicArray::Union(){
}
void DynamicArray::Intersection() {
}
void DynamicArray::Complement(){
}
int DynamicArray::Insert(int position, int entry, int size) {
if(!Qelement()){
for(int i = size+1; i > position+1; i--){
array[i] = array[i-1];
}
array[position] = entry;
}
}
int DynamicArray::Delete(int position, int entry, int size){
for(int i = 0; i < size; i++){
if(array[i] == entry) {
for(int x = i; x < size; i++){
array[x] = array[x+1];
}
size--;
}
}
}
bool DynamicArray::Qelement(int size, int entry) {
for(int i = 0; i < size; i++){
if(array[i] == entry){
return true;
}
}
}
int DynamicArray::Qset(int size){
return size;
}
main.cpp
- 这是我的问题所在。我继续收到的错误是dArray
不是数组。
//main.cpp
#include <iostream>
//#include <DynamicArray.h>
#include "DynamicArray.h"
//#include "DynamicA.cpp"
//using namespace std;
int main() {
DynamicArray dArray();
for(int i = 0; i < array; i++) {
cout << dArray[i];
}
}
答案 0 :(得分:3)
您的类DynamicArray
不是数组,编译器正确。它只是一个你定义的课程。要使代码正常工作,您需要重载 DynamicArray::operator[](int)
,例如:
#include <cassert>
int DynamicArray::operator[](int idx)
{
assert(idx < size);
return array[i];
}
原因是operator[]
仅为内置数组类型定义,它具有已建立的含义并且由编译器理解。但是你已经定义了一个任意的类,你理解它是一个数组只是你的理解,即一个假设,编译器决不会这样认为,所以说。
现在,在您遇到由此错误导致的问题之前,让我指出这一点:字段size
和array
必须是私有的或至少受到保护!阅读C ++中的 encapsulation ,以及该语言的其他两三个基本原理。您可能想知道如何在给定此更改的情况下从外部访问数组的大小,以及所谓的 getter-setter方法发挥作用的地方。定义int DynamicArray::size() const { return size; }
以让数组告诉其客户端的大小。
现在,您可以将先前定义的operator[](int)
与int size()
:
DynamicArray myArray(5);
for(int i = 0; i < myArray.size(); ++i)
std::cout << myArray[i] << " ";
其他错误:@ crashmstr指出的两个:*array = new int[size];
应该是array = new int[size];
而DynamicArray myArray();
不会构建,因为这会调用未定义的默认构造函数。