C++ 找不到包含
C++ Cannot find Include
在 main.cpp
中,我不断收到错误提示 print
未定义(以及其他类似的错误。
我在名为 "misc"
的头文件下定义了 print()
misc.h
#include <iostream>
#include <cstdlib>
#include <fstream>
#define MISC_H
#ifndef MISC_H
void print(string str) { cout << str << endl; }
string userIn(string prompt = "Option:") { //For collecting user responses
string response;
print(prompt);
cin.clear();
cin.sync();
getline(cin, response);
if (!cin) { response = "wtf"; }
else if (response == "512") { //Secret termination code
print("Program terminated");
exit(0);
}
print("");
return response;
}
#endif
然后在main.cpp
我#include Headers/misc.h"
(头文件位于单独的文件夹)
我这里有什么地方做错了吗?
您的 #ifndef
和 #define
顺序错误。应该是:
#ifndef MISC_H
#define MISC_H
最好在其他包含之前的文件顶部。
在不知道您使用的编译命令的情况下,我看到的是您的“include guard”不正确。
第一个命令 #define MISC_H
将使宏开始存在。
之后你调用#ifndef MISC_H
的时候会一直为false,因为你刚刚定义了它,效果是这个文件的源总是被丢弃
您需要将这些线翻转成如下所示:
#ifndef MISC_H
#define MISC_H
从未到达 #ifndef MISC_H ... #endif
块。 MISC_H 是在此之前定义的,因此它永远不会通过那里的 if 条件,因此永远不会定义您的打印函数。
这样做:
#ifndef MISC_H
#define MISC_H
//Now define what you want to define
尽管您可以完全省略这些并使用 #pragma once
,如果可用的话。
在 main.cpp
中,我不断收到错误提示 print
未定义(以及其他类似的错误。
我在名为 "misc"
的头文件下定义了print()
misc.h
#include <iostream>
#include <cstdlib>
#include <fstream>
#define MISC_H
#ifndef MISC_H
void print(string str) { cout << str << endl; }
string userIn(string prompt = "Option:") { //For collecting user responses
string response;
print(prompt);
cin.clear();
cin.sync();
getline(cin, response);
if (!cin) { response = "wtf"; }
else if (response == "512") { //Secret termination code
print("Program terminated");
exit(0);
}
print("");
return response;
}
#endif
然后在main.cpp
我#include Headers/misc.h"
(头文件位于单独的文件夹)
我这里有什么地方做错了吗?
您的 #ifndef
和 #define
顺序错误。应该是:
#ifndef MISC_H
#define MISC_H
最好在其他包含之前的文件顶部。
在不知道您使用的编译命令的情况下,我看到的是您的“include guard”不正确。
第一个命令 #define MISC_H
将使宏开始存在。
之后你调用#ifndef MISC_H
的时候会一直为false,因为你刚刚定义了它,效果是这个文件的源总是被丢弃
您需要将这些线翻转成如下所示:
#ifndef MISC_H
#define MISC_H
从未到达 #ifndef MISC_H ... #endif
块。 MISC_H 是在此之前定义的,因此它永远不会通过那里的 if 条件,因此永远不会定义您的打印函数。
这样做:
#ifndef MISC_H
#define MISC_H
//Now define what you want to define
尽管您可以完全省略这些并使用 #pragma once
,如果可用的话。