2012-12-17 75 views
1
using ::bb::cascades::Application; 

#include <bb/cascades/Application> 

這兩個聲明是什麼意思?包括和使用聲明

是否有任何好的教程深入地陳述使用指令/聲明?謝謝。

+0

你應該抓住並閱讀[好書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – Angew

回答

3

#include是前置指令。它基本上告訴前置器採用給定的文件並用文件內容替換#include行。

using另一方面可以使用前綴namespacenamespace(結構,枚舉,函數)中的名稱。在這種情況下::bb::cascades::Application將使您能夠使用寫

Application app; 

代替

::bb::cascades::Application app; 

如果::bb::cascades::Application是默認constructible類。

「爲什麼我需要使用#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中,否則你會出現鏈接錯誤。

+0

那麼爲什麼我需要使用include?我可以做'包括'可以做什麼'使用指令'的權利? – Tahlil

+1

不,你不能。你不能引入你沒有包含在#include中的東西。 「使用」僅允許您使用其他範圍內的內容,而無需完全限定它們。但範圍必須是本身可見的,這就是你使用#include爲 – Zeks

+0

你可以請示例解釋:)謝謝。 – Tahlil