1

定义为:Class.h

#ifndef CLASS_H_
#define CLASS_H_

#include "Class2.h"    
#include <iostream>

struct Struct1{
};

struct Struct2{
};

class Class1 {
};

#endif 

然后是另一个头文件,我在这里使用它:

#ifndef CLASS2_H_
#define CLASS2_H_

#include "Class.h"

class Class2 {
    public:
        Class2( Struct1* theStruct, Struct2* theStruct2); //Can't find struct definitions
    private:
};

#endif 

这些都在同一个目录中。它没有看到那些结构定义!对我来说,它们似乎在全球范围内。有人可以向我解释为什么 Class2 看不到它们吗?编译器并没有抱怨找不到 Class 的头文件,所以不可能是这样。

4

1 回答 1

4

以下是对您的完整代码的猜测。请张贴,然后我们可以更好地帮助你。


如果您的完整代码如下所示,那么您应该更改它

#ifndef CLASS_H_
#define CLASS_H_

#include <iostream>
#include "Class2.h"

struct Struct1{
};

struct Struct2{
};

class Class1 {
};

#endif

因为CLASS_H_已经定义了宏,所以在Class2.h另一个标题中不会包含另一个时间,然后在那个时候Struct1并且Struct2还不知道。尽可能使用前向声明来修复它。例如在Class2.h

#ifndef CLASS2_H_
#define CLASS2_H_

// no need for that file
// #include "Class.h"

// forward-declarations suffice    
struct Struct1;
struct Struct2;

class Class2 {
    public:
        Class2( Struct1 theStruct, Struct2 theStruct2);
    private:
};

#endif

如果另一个标头不需要任何一个的定义Class2,那么也使用前向声明。不需要定义(即声明就足够了)

  • 引用和指针
  • 函数声明中的函数参数不是定义

如果您想访问一个成员,想要获取sizeof或想要定义一个参数类型为 等的函数,则需要Class2Struct1

于 2009-08-15T16:39:15.213 回答