VS 2012 (Visual C): ошибка C2143: синтаксическая ошибка: пропустить ";" до "*"

У меня есть эта ошибка в "iterator_of_array_int.h":

#include "array_of_int.h"
#include <cstdlib>    
namespace leonidandand {
    class iterator_of_array_int
    {           
    private:
        std::size_t index;
        // next line has error
        array_of_int * ptr_to_arr;
        friend class array_of_int;
    };
}

"Array_of_int.h"

#pragma once

#include <cstdlib>
#include "iterator_of_array_int.h"
namespace leonidandand {
    class array_of_int {
    public:    
        typedef iterator_of_array_int iterator;
        iterator_of_array_int begin();
        iterator_of_array_int end();
    };
}

Я включил "array_of_int.h". В чем дело???

3 ответа

Решение

Вы включены array_of_int.h который, прежде чем определить array_of_int, включены iterator_of_array_int.h, Поэтому, когда компилятор видит вашу строку ошибки, он не видел никакого объявления имени array_of_int, Сообщение об ошибке не является одним из наиболее полезных, выдаваемых компилятором.

Я имею привычку объявлять классы в заголовках; это все, что вам нужно в iterator_of_array_int.hтак что замени include линия с class array_of_int; и это хорошо.

Обычно эта ошибка означает, что она не распознает тип, который вы поставили перед ' * '

Предполагая, что у вас есть определение структуры / класса array_of_int в файле array_of_int.h, убедитесь, что в конце определения у вас есть точка с запятой. Похоже, что тип не распознается компилятором

Другие вопросы по тегам