结构原型的问题(未定义类型的无效使用)c ++

时间:2013-10-10 08:48:40

标签: c++ pointers struct

我希望我的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&gt;(const caba&amp;)':

     

Test.cpp | 13 |错误:无效使用未定义类型`struct aba'

     

Test.cpp | 4 | error:`struct aba'的前向声明

     

Test.cpp | 13 |错误:无效使用未定义类型`struct aba'

     

Test.cpp | 4 | error:`struct aba'的前向声明

但为什么aba未定义?它有一个原型。

1 个答案:

答案 0 :(得分: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;
}