繁体   English   中英

如何在其他 class header 文件中包含 class header 文件

[英]How to include class header files in other class header files

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

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

我的第一个想法是在AutoCounter.h文件中#include "Counter.h" ,这样我就可以创建私有Counter object。

//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.h包含在main.cpp文件中,但仍然有相同的错误。

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

正如我之前所说,我使用的是 C/C++ Makefile 项目扩展,它只建议我更改此:

########################################################################
####################### 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"时,它可以工作,因为该文件存在于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
$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM