#include 是一个前置指令。它基本上是告诉前驱获取给定的文件并将#include 行替换为文件内容。
另一方面,using 使得可以在 namespace (结构、枚举、函数)中使用没有 namespace 前缀的名称。在这种情况下,::bb::cascades::Application 将使您能够使用 write
Application app;
而不是
::bb::cascades::Application app;
如果::bb::cascades::Application 是默认可构造类。
“为什么我需要使用#include?”
为了使用函数或创建对象,编译器必须知道这些事物的结构,例如函数签名或类的成员和方法。这些东西都写在头文件中。让我们看一个非常简单的例子,我们提供了一些模块(称为module):
模块module
// MODULE_HPP
// only declarations, no code
namespace module{
struct dummyStruct{
void dummyMethod(char);
char dummyMember;
};
double dummyFunc(double);
};
// MODULE_CPP
// actual implementation
namespace module{
void dummyStruct::dummyMethod(char c){
dummyMember = c;
};
void dummyFunc(double a){
return a + 1;
}
};
如您所见,我们的module 由一个带有成员和方法的结构以及一个简单的函数组成。请注意,我们将所有内容都包装在命名空间module 中。现在我们有另一个程序想要使用module:
#include <iostream>
using module::dummyFunc;
int main(){
std::cout << dummyFunc(1) << std::endl;
}
这是行不通的,因为编译器不知道命名空间module。您需要添加声明,这可以通过使用#include 来完成(请参阅此答案的第一段):
#include <iostream>
#include "module.hpp"
using module::dummyFunc;
int main(){
std::cout << dummyFunc(1) << std::endl;
}
请注意,您需要同时编译 module.cpp 和 main.cpp,否则会出现链接器错误。