Я хочу, чтобы моя структура кабины содержала указатель на переменную структуры 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'
Но почему аба не определена? Существует прототип этого.
Вы объявили 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;
}