включить и использовать декларацию

using ::bb::cascades::Application;

#include <bb/cascades/Application>

Что означают эти две декларации?

И есть ли хорошие учебники, в которых подробно говорится об использовании директивы / декларации? Спасибо.

1

Решение

#include это директива препроцессора. Это в основном говорит препроцессору взять данный файл и заменить #include строка с содержимым файлов.

using с другой стороны, позволяет использовать имена внутри namespace (структуры, перечисления, функции) без namespace префикс. В этом случае ::bb::cascades::Application позволит вам использовать запись

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, в противном случае вы получите ошибки компоновщика.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]