0

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

但是当我在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 未定义?它有一个原型。

4

1 回答 1

2

您已声明aba,但您的代码也需要定义。您可以做的是将有问题的代码从caba类定义中移出,并移到包含和的.cpp实现文件中。aba.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;
}
于 2013-10-10T08:50:51.593 回答