我正在为在 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.h
在main.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] 删除。
我来说两句