[英]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.