using ::bb::cascades::Application;
#include <bb/cascades/Application>
これらの2つの宣言はどういう意味ですか?
また、ディレクティブ/宣言の使用について深く説明している優れたチュートリアルはありますか?ありがとうございます。
using ::bb::cascades::Application;
#include <bb/cascades/Application>
これらの2つの宣言はどういう意味ですか?
また、ディレクティブ/宣言の使用について深く説明している優れたチュートリアルはありますか?ありがとうございます。
#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 の両方をコンパイルする必要があることに注意してください。そうしないと、リンカー エラーが発生します。