如何在其他类头文件中包含类头文件

自行车21

我正在为在 Linux 上运行的 Visual Studio Code 使用 C/C++ Makefile 项目扩展,在我的情况下,它为我生成了一个带有一些预设文件夹的 C++ 项目。我还使用 g++ 编译器来处理这个 makefile 扩展。

我正在做一个项目,其中有一个Counter类和一个AutoCounter类,它们位于单独的.h文件中。AutoCounter类中,我需要创建类的私有对象Counter

我的第一个想法是#include "Counter.h"AutoCounter.h文件中创建私有Counter对象。

//AutoCounter.h
#pragma once
#include "include/Counter.h"

class AutoCounter
{
private:
    Counter count; //object from class Counter
public:
    ( . . . )
};

但是,当我make完成整个项目时,编译器说:

src/include/AutoCounter.h:4:10: fatal error: include/Counter.h: File or Folder not found
    4 | #include "include/Counter.h"
      |          ^~~~~~~~~~~~~~~~

我也尝试Counter.hmain.cpp文件中包含 ,但仍然有相同的错误。

这很奇怪,因为main.cpp没有包括这个标题在内的问题。

正如我之前所说,我使用的是 C/C++ Makefile Project 扩展,它只建议我改变这个:

########################################################################
####################### Makefile Template ##############################
########################################################################

# Compiler settings - Can be customized.
CC = g++
CXXFLAGS = -std=c++14 -Wall -g
LDFLAGS = 

# Makefile settings - Can be customized.
APPNAME = main
EXT = .cpp
SRCDIR = src
OBJDIR = obj
疯狂科学家

如果您阅读编译器的文档,您将看到该#include "..."表单在与当前正在处理的文件相同的目录中搜索包含的头文件

当您编译main.cpp#include "include/Counter.h",它会起作用,因为该文件与 where 相关main.cpp

当您编译include/AutoCounter.h并添加 时#include "include/Counter.h",这将不起作用,因为与include/Counter.h该文件include/AutoCounter.h不存在相关:编译器正在寻找include/include/AutoCounter.h.

如果要使用这种类型的相对包含路径,那么在include/AutoCounter.h文件中您只需要#include "Counter.h",因为AutoCounter.h已经在include目录中。

以上绝对是你的问题。如果修复不起作用,您一定是错误地应用了它。这是我放在一起来展示的一个示例:

$ echo '#include "include/AutoCounter.h"' > main.cpp

$ mkdir include

$ echo '#include "include/Counter.h"' > include/AutoCounter.h

$ touch include/Counter.h

$ gcc -c -o main.o main.cpp
In file included from main.cpp:1:
include/AutoCounter.h:1:10: fatal error: include/Counter.h: No such file or directory
    1 | #include "include/Counter.h"
      |          ^~~~~~~~~~~~~~~~~~~
compilation terminated.

现在修复它:

$ echo 'include "Counter.h"' > include/AutoCounter.h

$ gcc -c -o main.o main.cpp
$

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章