包括和使用声明

时间:2012-12-17 07:31:46

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

using ::bb::cascades::Application;

#include <bb/cascades/Application>

这两个声明是什么意思?

是否有任何好的教程深入说明使用指令/声明?谢谢。

1 个答案:

答案 0 :(得分:3)

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