c++ - 没有看到全局结构

标签 c++ mingw

定义为: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或者想要定义一个参数类型为Class2Struct1的函数,则需要它 等按值。

关于c++ - 没有看到全局结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1282212/

相关文章:

c++ - 将字符串转换为 boost::gregorian::greg_month

c# - 在 C# 中为 p/invoke 创建一个基本的 C++ .dll

c++ - 宏 `assert`会在C++20中被移除吗?

c - stdint.h 和 inttypes.h 丢失

定义了 unicode 的 int _tmain ( int argc, TCHAR* argv[] ) 无法识别命令行参数

c++ - 为什么 "using namespace std;"被认为是不好的做法?

c++ - 如何正确解释数字(十六进制、十进制、十进制)

c++ - wWinmain、Unicode 和 Mingw

c - 在 gdb 上,LoadLibrary 满足 sti 指令并发出 SIGILL 信号

c - 应用程序无法正确初始化(0xc0150002)