Member 14713436 Ответов: 5

Ошибка: ожидаемый инициализатор перед "классом"


  #ifndef ARRAY_H
  #define ARRAY_H
  #include <iostream>
  using std:: ostream;
  using std::istream;
  int main()
  class array
{
   friend ostream &operator << (ostream &, const Array &);
   friend istream &operator >> (istream &, Array &);
   public:
   Array (int = 10);
   Array (const Array &);
  ~Array();
  int getSize() const;
  const Array &operator =(const Array &);
  bool operator ==(const Array &) const;
  bool operator!=(const Array &right) const
{
  return! (*this == right);
}
  int &operator[]( int );
  int operator[]( int ) const;
  private:
  int size;
  int *ptr;

};
 #endif


Что я уже пробовал:

что случилось?
как исправить ошибку?
error: expected initializer before 'class'

0x01AA

"что не так?": то, что я вижу, более или менее все здесь не так. Я предлагаю начать с очень простой программы "Hello World", чтобы получить основы. Что-то вроде этого и многое другое: С++ Всем Привет с занятий в студии Фрейя[^]

5 Ответов

Рейтинг:
2

Rick York

Поскольку это ваш собственный заголовочный файл, основное объявление вообще не обязательно должно быть там. Кроме того, полезно иметь правильный отступ. Подобный этому:

class Array
{
public:
    Array( int = 10 );
    Array( const Array & );
    ~Array();

    const Array &operator = ( const Array & );
    bool operator == ( const Array & ) const;
    bool operator != ( const Array &right ) const   { return ! ( *this == right ); }
    int & operator [] ( int );
    int operator [] ( int ) const;

    friend ostream & operator << ( ostream &, const Array & );
    friend istream & operator >> ( istream &, Array & );

    int getSize() const;

private:
    int   size;
    int * ptr;
};


Рейтинг:
2

steveb

 class array
{
   friend ostream &operator << (ostream &, const Array &);


имена типов чувствительны к регистру, поэтому Ваш "массив" должен быть "массивом" в качестве объявления класса.

Кроме того, поскольку вы удаляете пространство имен std::, ваш класс имеет потенциальное столкновение с типом STL std::array


Рейтинг:
2

Stefan_Lang

Это выглядит так, как будто вы скопировали фрагменты кода из двух или более источников, не зная, что делает каждый из них.

В случае вашего кода это выглядит так, как будто вы пытались включить код, определяющий массив классов, в свою основную программу. Однако то, как вы это сделали, - это не то, как вы объединяете код в C или C++! Хотя я мог бы указать, что именно вы сделали неправильно, вместо этого я предлагаю вам прочитать это руководство: Заголовки и включает в себя: Почему и как - форум C++ [^]


Рейтинг:
1

0x01AA

В коде, который вы показываете, слишком много неправильных вещей. Я предлагаю поработать с очень basci c++ примером "Hello World", чтобы изучить основы.

Например: С++ Всем Привет с занятий в студии Фрейя[^]


Maciej Los

5ed!

0x01AA

Спасибо Мацей

Рейтинг:
1

OriginalGriff

Чтобы добавить к тому, что было сказано - и 0x01AA здесь точен - вы пропустили точку с запятой раньше class.
Изменить это:

int main()
До настоящего времени:
int main();
Или вот это:
int main(){}
Это исправит одну ошибку, которую вы заметили.
Их еще много, очень много...


Stefan_Lang

Я не думаю, что исправление ошибок компилятора приведет к чему-либо в этом случае. Это больше похоже на случай незнания того, как использовать код из других исходных файлов в C/C++. В смысле включения кода, а не #includeИнг