c++ - 包含和使用声明

标签 c++ include using-directives using-declaration

using ::bb::cascades::Application;

#include <bb/cascades/Application>

这两个声明是什么意思?

是否有深入说明 using 指令/声明的好教程?谢谢。

最佳答案

#include 是一个预处理器指令。它基本上告诉预处理器获取给定的文件并将 #include 行替换为文件内容。

另一方面,

using 可以在没有 namespace 前缀的情况下使用 namespace 中的名称(结构、枚举、函数)。在这种情况下,::bb::cascades::Application 将使您能够使用 write

Application app;

代替

::bb::cascades::Application app;

如果 ::bb::cascades::Application 是一个默认可构造的类。

“为什么我需要使用 #include?”

为了使用函数或创建对象,编译器必须知道这些东西的结构,例如函数签名或类的成员和方法。这些东西都是写在头文件里的。让我们看一个非常简单的示例,其中我们提供了一些模块(称为 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:

#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,否则会出现链接器错误。

关于c++ - 包含和使用声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13910000/

相关文章:

c++ - 使用 opencv 进行视频稳定

c++ - string.find() 错误地返回 true

c++ - 是否存在定时指针?

java - 如何在不复制代码的情况下在 Java Web 应用程序中包含 jsp 页面?

php - Python - 包含另一个 Python 脚本

c++ - siginfo_t 尚未声明 : caused by inclusion of a thrift header

c++-cli - 在 C++/CLI 中使用指令指定类别名

c++ - 抽象类中的嵌套类

c# - VB.NET命名空间缩写: How do I make this work in equivalent C# code?

c# - 我如何知道遗漏了哪些 using-directives?