Loading...
peter.gaydeek avatar peter.gaydeek 2 Точки

Task 1 Compile, Code Organization and C++ Templates

Извинявам се за глупавия въпрос, но или аз съм нещо прегрял и не мога да схвана нищо или наистина съм много зле.Можете ли да ми обясните това "using STANDARD_TEMPLATE_LIBRARY;" тук какво трябва да правя с него:

#include "Defines.h"


int main() {
#ifndef DONT_COMPILE_THIS
    this here has compilation errors : )
#endif // !DONT_COMPILE_THIS
    using STANDARD_TEMPLATE_LIBRARY;
    string input;
    cin >> input;
    cout << input << endl;

    return 0;
}

 

пробвах какво ли не ....това Namespace ли е или трябва да го дефинирам по друг начин...просто при мен не става...свети в червено и това е ...

Тагове:
0
C++ Advanced
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, колега,

Забележи, че имаш:
string input;

string-а не можеш да го достъпиш директно, защото се намира в namespace-а "std".
Има 2 начина да го достъпиш:
1) std::string
2) да имаш някъде над твоето извикване към string -  "using namespace std;"

В Лекцията миналия път учихме за предпроцесорни директиви (#define)
Както говорихме в лекцията те не се нищо по-различно от текстов find-and-replace.

т.е. STANDARD_TEMPLATE_LIBRARY май ми прилича на предпроцесорна директива... :)
Какво трябва да седи под тази директива оставам на теб да се сетиш.

Поздрави

0
23/02/2019 20:05:43
peter.gaydeek avatar peter.gaydeek 2 Точки

Мерси колега, но какво ли не изчетох и прегледах лекцията сигурно 20 пъти и НЕ МОГА! Не разбирам...какво трябва да направя...

#ifndef DEFINES_H
#define DEFINES_H
#define DONT_COMPILE_THIS

#define STANDARD_TEMPLATE_LIBRARY
#include <string>
#include <iostream>
using namespace std;

#endif // !DEFINES_H


това пиша и всичко светва нормално освен този "using" ...... какви ли не задачки решавах досега и тази която няй вероятно е от 5 реда не мога....

0
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, отново.
Нямаш грижи. Обяснявам отдалече.

Правим си макро
#define ABRA CADABRA 

и по нататък в main()-а имаме
int main() {
    std::cout << ABRA << std::endl;
    return 0; 
}

Какво ще се случи?
Компилаторът преди да компилира твоя файл първо ще изпълни предпроцесорните директиви -> т.е. ще дифинира ABRA и по нататък в main()-а среща това ABRA и прави find-and-replace. Т.е. ABRA се заменя със CADABRA.

След като са се изпълнили предпроцесорните директиви сме останали със следния код:
int main() {
    std::cout << CADABRA << std::endl;
    return 0;
}

Компилацията на този код ще ти гръмне, защото ще ти изреве - "не знам какво е CADABRA".
(Ако беше "CADABRA" /в кавички/ - това вече е нещо, което компилатора знае и щеше да сработи).

Това беше само за демонстрация как работят нещата щом  не ти е станало ясно.
Дай сега да погледнем твоя случай.

Имаш #define STANDARD_TEMPLATE_LIBRARY
т.е. ти просто казваш - Дефинирам, че STANDARD_TEMPLATE_LIBRARY съществува, но то няма стойност.
Какво значи, че съществува?
Значи, че ако някой направи предпроцесорна проверка
#ifdef STANDARD_TEMPLATE_LIBRARY
//това би влязло тук, защото е дефинирано
#endif

Ок. Дефинирано е, но то няма стойност.
В скелета на програмата (в main()-а) имаш
using STANDARD_TEMPLATE_LIBRARY;
Компилаторът ще направи find-and-replace и това ще се разпъне до "нищо"
т.е. ще се получи кодът:
using ;

Това е компилационна грешка. Отделно, че string-а на долния ред ще ти гръмне, че нямаш std namespace-a.

И сега след тези 2 тона хакове от живота казваме: 
#define STANDARD_TEMPLATE_LIBRARY namespace std

След това кода:
using STANDARD_TEMPLATE_LIBRARY;
ще се разпъне до:
using namespace std;

По-здрави :)

1
24/02/2019 15:41:42
peter.gaydeek avatar peter.gaydeek 2 Точки

Привет отново!

Боже то какво било...мина ми през акъла, но дали го направих не помня... 

благодаря ти отново колега, сега дори разбрах много по-добре всичко!

По-здрави и от мен! Златен си!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.