gpt4 book ai didi

c++ - 为什么此 header 编译时缺少#include?

转载 作者:行者123 更新时间:2023-11-27 23:11:55 27 4
gpt4 key购买 nike

人.h

#ifndef PERSON_H_
#define PERSON_H_

/* Person.h */

class Person {
int age;
std::string name;

public:
Person(int, std::string);
std::string getName();
int getAge();

};

#endif /* PERSON_H_ */

person(int std::string) 函数声明使用 std::string 名称,但我没有将它包含在头文件中。因此,我希望编译器提示缺少符号。然而它编译并运行良好!为什么?

剩下的代码...

人.cpp

#include <string>
#include "Person.h"

Person::Person(int age, std::string name)
{
this->name = name;
this->age = age;
}

std::string Person::getName()
{
return this->name;
}

int Person::getAge()
{
return this->age;
}

main.cpp

#include <string>
#include "Person.h"

int main() {

printFunc();

Person chelsea_manning(5, std::string("Chelsea Manning"));

}

此外,我是 C++ 的新手,所以如果您发现我的代码/OOP 有任何奇怪之处,请告诉我。

最佳答案

程序的编译从包含您的 main 的文件的顶部开始函数(从技术上讲,预处理器在程序编译之前运行,但它仍然在同一个地方启动)。在你的情况下,它做的第一件事是包括 <string>到那个文件。然后它包括Person.h .自 <string>已经包含在内,字符串文件的所有内容都在您的代码中的个人文件之前,并且所有内容都以正确的顺序声明。如果你要包括 Person.h之前<string> , 或者不包括 <string>在您的主文件中,您确实会收到一个编译错误。

#include说明就像复制/粘贴:字面意思是 <string>文件并将其内容放入包含它的源文件中。接下来,对 Person.h 做同样的事情。 .所以运行预处理器后的最终结果是

<-- contents of <string> -->
<-- contents of Person.h -->

int main()
...

因此在您的示例中,所有内容都以正确的顺序声明。

关于c++ - 为什么此 header 编译时缺少#include?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com