gpt4 book ai didi

c++ - 奇怪的编译问题 - 无法识别的类没有编译器错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:41 24 4
gpt4 key购买 nike

我有太多代码要发布,但我不断收到编译错误,在我的项目中无法识别类 Orderbk

最奇怪的是 Orderbk 中没有实际的编译错误(这会导致所有其他类无法识别它,这是可以理解的)。

谁能给我一些线索,因为我的编译器在 Orderbk 中没有发现问题,但每个引用 Orderbk 的类都报告它未定义?

1>------ Build started: Project: FXDcr (Intel C++ 13.0), Configuration: Debug x64 ------
1> Derivative.cpp
1>C:\DXDcr\FXDcr\Instr.h(29): error : identifier "Orderbk" is undefined
1> Orderbk getOrderbk();
1> ^
1>
1>C:\DXDcr\FXDcr\Instr.h(33): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1>C:\DXDcr\FXDcr\Stk.h(35): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1> FXDcr.cpp
1> FXMsg.cpp
1> Fut.cpp
1>C:\DXDcr\FXDcr\Instr.h(29): error : identifier "Orderbk" is undefined
1> Orderbk getOrderbk();
1> ^
1>
1>C:\DXDcr\FXDcr\Instr.h(33): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1>C:\DXDcr\FXDcr\Stk.h(35): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1> Index.cpp
1>C:\DXDcr\FXDcr\Instr.h(29): error : identifier "Orderbk" is undefined
1> Orderbk getOrderbk();
1> ^
1>
1>C:\DXDcr\FXDcr\Instr.h(33): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1> Instr.cpp
1>C:\DXDcr\FXDcr\Stk.h(13): error : not a class or struct name
1> class Stock : public Instr {
1> ^
1>
1>C:\DXDcr\FXDcr\Stk.h(35): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1>C:\DXDcr\FXDcr\Mappings.h(31): error : identifier "Instr" is undefined
1> static unordered_map<string, boost::shared_ptr<Instr> > GetDictOfAllInstrs();
1> ^
1>
1> Main.cpp
1>C:\DXDcr\FXDcr\Instr.h(29): error : identifier "Orderbk" is undefined
1> Orderbk getOrderbk();
1> ^
1>
1>C:\DXDcr\FXDcr\Instr.h(33): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1> Mappings.cpp
1>C:\DXDcr\FXDcr\Instr.h(29): error : identifier "Orderbk" is undefined
1> Orderbk getOrderbk();
1> ^
1>
1>C:\DXDcr\FXDcr\Instr.h(33): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1> Order.cpp
1> Stock.cpp
1>C:\DXDcr\FXDcr\Instr.h(29): error : identifier "Orderbk" is undefined
1> Orderbk getOrderbk();
1> ^
1>
1>C:\DXDcr\FXDcr\Instr.h(33): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1> SIA.cpp
1>C:\DXDcr\FXDcr\Instr.h(29): error : identifier "Orderbk" is undefined
1> Orderbk getOrderbk();
1> ^
1>
1>C:\DXDcr\FXDcr\Instr.h(33): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
1>C:\DXDcr\FXDcr\Stk.h(35): error : identifier "Orderbk" is undefined
1> Orderbk orderbk;
1> ^
1>
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

编辑我所有的头文件都是以下格式:

#ifndef CLASS_H
#define CLASS_H
class CLASS{

};
#endif

最佳答案

头文件在每个编译单元中只能包含一次,以避免重复定义。这是通过 #ifdef 或其他解决方案完成的。

如果您有相互依赖的 header ,您将得到一个 header 文件循环,这会导致您在问题中提到的那种错误。

这是一个例子(我只是使用#pragma once 来表明该文件只包含一次,可能无法在任何地方工作):

头文件a.h

#pragma once
#include "b.h"
class A {
B b_instance;
};

头文件b.h

#pragma once
#include "a.h"
class B {
A a_instance;
};

代码文件program.cpp

#include "a.h"
#include "b.h"

编译program.cpp时,首先包含a.ha.h 做的第一件事是包含 b.hb.h 然后尝试包含 a.h,但它将被忽略,因为它已经包含。然后解析类 B 时,它找不到 A,因为我们还没有在 a.h 中找到那么远。

一个解决方案是在头文件中使用指针(如果可能)。

头文件b.h

#pragma once
class A;
class B {
A *a_instance;
public:
int do_stuff();
};

有了 class A 的前向定义,我可以使用指向它的指针,因为编译器总是知道它们的大小。但是,我不能执行 a_instance = new A(); 或使用 A 的成员,这必须放在 b.cpp 中!

代码文件b.cpp

#include "a.h"
int B::do_stuff() {
a_instance = new A();
// Or this
A my_instance;
}

关于c++ - 奇怪的编译问题 - 无法识别的类没有编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599385/

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