定义为: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 的 header ,所以不可能是这样。
最佳答案
接下来是对您的完整代码的猜测。请发布,然后我们可以更好地帮助您。
如果您的完整代码碰巧像下面这样,那么您应该更改它
#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
如果另一个 header 也不需要 Class2
的定义,那么也可以在那里使用前向声明。不需要定义(即声明就足够了)
- 引用资料和指针
- 函数声明中的函数参数不是定义
如果你想访问一个成员,想要获取sizeof
或者想要定义一个参数类型为Class2
,Struct1的函数,则需要它
等按值。
关于c++ - 没有看到全局结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1282212/