gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:12:55 25 4
gpt4 key购买 nike

定义为: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com