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

#include <bb/cascades/Application>

これらの2つの宣言はどういう意味ですか?

また、ディレクティブ/宣言の使用について深く説明している優れたチュートリアルはありますか?ありがとうございます。

4

1 に答える 1

3

#include先行指令です。基本的に、指定されたファイルを取得し、行をファイルの内容に置き換えるように前処理者に指示し#includeます。

using一方、接頭辞namespaceなしで (構造体、列挙型、関数)内で名前を使用できるようにします。namespaceこの場合::bb::cascades::Application、書き込みを使用できるようになります

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、メンバーとメソッドを含む構造体と単純な関数で構成されています。すべてを namespace にまとめることに注意してください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 の両方をコンパイルする必要があることに注意してください。そうしないと、リンカー エラーが発生します。

于 2012-12-17T07:35:34.553 に答える