Я столкнулся с ошибкой ниже - когда я просто предоставляю определение класса первым, а затем объявляю его позже. Мое понимание было до тех пор, пока мы это делаем, поскольку я много раз выполнял определение функции, компилятор получает его, но, похоже, мое понимание ошибочно, может кто-то помочь мне понять, что не хватает в понимании того, как объявить класс.Ошибка C2027: использование неопределенного типа - как объявить класс
error C2027: use of undefined type 'generic_iterator'
note: see declaration of 'generic_iterator
Не работает - ошибка показано выше
#include <iostream>
class generic_iterator;
class darray
{
public:
typedef generic_iterator iterator;
darray();
darray(int size);
~darray();
int& at(int index);
int& operator [](int i);
int* data(void);
bool empty();
void fill(int val);
void print();
size_t max_size();
iterator begin() {return iterator(ptrarray); }
iterator end() { return iterator(ptrarray + size); }
private:
int *ptrarray;
int num_elements;
int size;
};
class generic_iterator
{
public:
generic_iterator(int *ptr);
~generic_iterator();
generic_iterator& operator++(); // pre-increment
generic_iterator operator++(int); // post-increment
private:
int *iptr;
};
Работы: Когда весь класс объявлен первым
class generic_iterator
{
public:
generic_iterator(int *ptr);
~generic_iterator();
generic_iterator& operator++(); // pre-increment
generic_iterator operator++(int); // post-increment
private:
int *iptr;
};
class darray
{
public:
typedef generic_iterator iterator;
darray();
darray(int size);
~darray();
int& at(int index);
int& operator [](int i);
int* data(void);
bool empty();
void fill(int val);
void print();
size_t max_size();
iterator begin() {return iterator(ptrarray); }
iterator end() { return iterator(ptrarray + size); }
private:
int *ptrarray;
int num_elements;
int size;
};
благодарит за ответ и исправляет мой жаргон - так работает только способ, чтобы обойти ошибку - или есть другой способ объявления объявления в таких случаях? – ifelse
@ifelse Я изменил свой ответ. –
Aha !!! Я получил его сейчас, как правило, я объявляю в .cpp, и на этот раз я объявил его inline и что у меня возникла ошибка. Думаю, теперь я под ним лучше .. спасибо много! – ifelse