我希望我的caba结构包含一个指向aba结构变量的指针。我还希望aba结构根据set 的属性执行一些操作。

但是当我在caba中使用aba指针的属性时,出现错误

#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;
}


说:


  在成员函数`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未定义?有一个原型。

最佳答案

您已经声明了aba,但是您的代码也需要定义。您可以做的是将有问题的代码移出caba类定义,并移到同时包含.cppaba.hcaba.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;
}

10-08 11:28