1
using ::bb::cascades::Application;

#include <bb/cascades/Application>

这两个声明是什么意思?

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

4

1 回答 1

3

#include是一个前驱指令。它基本上告诉前处理程序获取给定的文件并用#include文件内容替换该行。

using另一方面,可以在 a namespace(structs, enums, functions) 中使用不带namespace前缀的名称。在这种情况下::bb::cascades::Application,您可以使用 write

Application app;

代替

::bb::cascades::Application app;

if::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;
}

这是行不通的,因为编译器不知道 namespace module。您需要添加声明,这可以通过使用来完成#include(请参阅此答案的第一段):

#include <iostream>
#include "module.hpp"
using module::dummyFunc;

int main(){
    std::cout << dummyFunc(1) << std::endl;
}

Note that you'll need to compile both module.cpp and main.cpp, otherwise you'll get linker errors.

于 2012-12-17T07:35:34.553 回答