Проблемы с прототипированием структуры (неправильное использование неопределенного типа) c ++

0

Я хочу, чтобы моя структура кабины содержала указатель на переменную структуры aba. И я также хочу, чтобы структура aba выполняла некоторые операции в зависимости от свойств set <caba>.

Но когда я использую свойства указателя aba внутри caba, я получаю сообщение об ошибке

#include<stdio.h>
#include<set>
using namespace std;
struct aba;
struct caba
{
    aba *m;
    int z;
    bool operator >(const caba &other)
    {
        if(m==NULL||other.m==NULL)
            return true;
        return (*m).x>(*(other.m)).x;
    }
};
set <caba> t;
struct aba
{
    int x,y;
    bool f()
    {
        return !t.empty();
    }
};

int main()
{
    return 0;
}

sayng:

В функции члена 'bool caba :: operator> (const caba &)':

Ошибка test.cpp | 13 |: недопустимое использование неопределенного типа 'struct aba'

Ошибка test.cpp | 4 |: форвардная декларация 'struct aba'

Ошибка test.cpp | 13 |: недопустимое использование неопределенного типа 'struct aba'

Ошибка test.cpp | 4 |: форвардная декларация 'struct aba'

Но почему аба не определена? Существует прототип этого.

Теги:
pointers
struct

1 ответ

2
Лучший ответ

Вы объявили aba, но ваш код также нуждается в определении. Что вы можете сделать, это переместить код нарушения из определения класса caba и в файл реализации .cpp который включает как aba.h и caba.h

// caba.h (include guards assumed)
struct aba;
struct caba
{
    aba *m;
    int z;
    bool operator >(const caba &other);
};

//caba.cpp
#include "caba.h"
#include "aba.h"
bool caba::operator >(const caba &other)
{
    if(m==NULL||other.m==NULL)
        return true;
    return (*m).x>(*(other.m)).x;
}
  • 0
    Благодарю. И нет ли способа объединить оба класса в один файл?
  • 0
    Лучше сделать так, как предложил juanchopanza, или вы можете попробовать это ideone.com/Vw4Vcz
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню