2013-10-10 2 views
0

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

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

#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:

In member function `bool caba::operator>(const caba&)':

Test.cpp|13|error: invalid use of undefined type `struct aba'

Test.cpp|4|error: forward declaration of `struct aba'

Test.cpp|13|error: invalid use of undefined type `struct aba'

Test.cpp|4|error: forward declaration of `struct aba'

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

ответ

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

Спасибо. И разве нет способа иметь оба класса в одном файле? – user2136963

+0

Лучше, чтобы это было похоже на juanchopanza, или вы можете попробовать это http://ideone.com/Vw4Vcz – sajas

+1

@ user2136963 Да, есть, но вам все равно придется поместить определение 'bool caba :: operator>' * после * определения класса 'aba'. – juanchopanza

Смежные вопросы