Программа SortedArray не компилируется - PullRequest
0 голосов
/ 06 мая 2020

У меня в настоящее время возникают проблемы с компиляцией моей программы C ++ SortedArray. Я действительно не знаю, где моя программа неправильная, и хотел бы выяснить, в чем проблема. Было бы здорово, если бы кто-нибудь мог мне помочь. Мне интересно, может быть, я неправильно вызываю свои функции из-за указателя, но пытался использовать операторы стрелки и точки. вот мой исходный код

ошибка компилятора

In file included from SortedArray.cpp:1:0:
SortedArray.h:17:12: error: ‘ostream’ does not name a type
     friend ostream & operator (ostream & out, const SortedArray & sA);
            ^~~~~~~
SortedArray.cpp: In member function ‘void SortedArray::insertVal(int)’:
SortedArray.cpp:57:12: error: request for member ‘isFull’ in ‘((SortedArray*)this)->SortedArray::arr’, which is of non-class type ‘int*’
     if(arr.isFull())
            ^~~~~~
SortedArray.cpp:58:11: error: request for member ‘expand’ in ‘((SortedArray*)this)->SortedArray::arr’, which is of non-class type ‘int*’
       arr.expand();
           ^~~~~~
SortedArray.cpp: In member function ‘bool SortedArray::deleteVal(int)’:
SortedArray.cpp:86:17: error: request for member ‘find’ in ‘((SortedArray*)this)->SortedArray::arr’, which is of non-class type ‘int*’
   int index=arr.find(val);
                 ^~~~
SortedArray.cpp: At global scope:
SortedArray.cpp:97:2: error: ‘ostream’ does not name a type
  ostream & operator<<(ostream &out, const SortedArray & sA){
  ^~~~~~~

// SortedArray.h

#ifndef SORTEDARRAY_H_
#define SORTEDARRAY_H_

class SortedArray
{
  public:
    SortedArray(int cap=10);
    ~SortedArray();
    int getCapacity();
    int getSize();
    bool isFull();
    bool isEmpty();
    void expand();
    void insertVal(int val);
    int find(int val);
    bool deleteVal(int val);
    friend ostream & operator (ostream & out, const SortedArray & sA);

  private:
    int capacity;
    int size;
    int *arr;
};
#endif

// SortedArray. cpp

#include "SortedArray.h"

SortedArray::SortedArray(int cap)
{
  capacity=cap;
  size=0;
  arr= new int[capacity];
}

SortedArray::~SortedArray()
{
  delete arr;
  size=0;
}
int SortedArray::getCapacity()
{
  return capacity;
}

int SortedArray::getSize()
{
  return size;
}

bool SortedArray::isFull()
{
  if(size==capacity);
    return true;

  return false;
}

bool SortedArray::isEmpty()
{

    if(size==0)
      return true;

    return false;
}

void SortedArray::expand()
{
    capacity=capacity*2;
    int *newArr=new int[capacity];
    for (int i=0;i<size;i++)
    {
      newArr[i]=arr[i];
    }
    delete arr;
    arr=newArr;
}

void SortedArray::insertVal(int val)
{
    if(arr->isFull())
      arr->expand();
    for(int i=0;i<size;i++)
    {
      if(arr[i]<=val)
      {
        for(int j =size;j>=i;j--)
        {
          arr[j+1]=arr[j];
        }
      }
      arr[i]=val;
      size++;
    }
}

int SortedArray::find(int val)
{
  for(int i=0;i<size;i++)
  {
    if(arr[i]=val)
    {
      return i;
    }
  }
  return -1;
}

bool SortedArray::deleteVal(int val){
  int index=arr->find(val);
  if(index==-1)
    return false;
  size--;
  for (int i=index;i<size;i++)
  {
    arr[i]= arr[i+1];
  }
  return true;
}

 ostream & operator<<(ostream &out, const SortedArray & sA){
  for(int i = 0; i < sA.getSize(); i++) {
        out << sA.arr[i] << " ";
    }
    return out;
}

1 Ответ

1 голос
/ 06 мая 2020

У вас большое количество мелких проблем. Чтобы начать перегрузку <<, вы должны #include <iostream>

В SortedArray.h вам не хватает << в:

friend std::ostream& operator<< (std::ostream& out, const SortedArray& sA);

В SortedArray.c, у вас есть нефункционирующие if at:

if(size==capacity);        // remove the ';'

isFull() expand() и find() не являются функциями-членами класса неклассового типа arr. Вам просто нужно:

if (isFull())
    expand();

и

int index=find(val);

Ваш тест для if (arr[i]=val) является сравнением, а не присваиванием, вам нужно:

if(arr[i] == val)

Наконец , чтобы передать const SortedArray& sA в вашей перегрузке <<, тогда sA.getSize() должно быть постоянным, например, как в заголовке, так и в источнике вам нужно:

int getSize() const;

и

int SortedArray::getSize() const
{
    return size;
}

Если я их все вспомнил, то теперь вы сможете компилировать без предупреждения. Если у вас все еще есть проблемы, просто добавьте комментарий, и я буду рад помочь вам в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...