Loading...
ljbomir avatar ljbomir -1 Точки

Викане на функция от друг файл, 9-та задача от C++ домашното

Здравейте,

 

Според 9та задача трябва да използваме функцията от задача 8 и да я извикаме от друг файл. Или поне така аз го разбирам.

"It should call the function from 8 for a value and check the result against the expected answer."

Рових из нета да видя как се вика функция от друг .cpp файл. Видях, че в повечето случаи се прави с хедър файл .h

Та ето как изглежда моя "reverse_import.h" файл:


void reverse_string ();
void reverse_math(int N);

Имам две функции от два различни файла. Пробам с и без входни параметри ( аргументи ). Пробвам всякак.

В cpp файла от задача 9 описвам:

#include <iostream>
#inlcude "reverse_import.h"

И гърми на втора линия, където викам хедър файла.

Пробвах да компилирам извън IDE едитора, пак същата грешка:

# gcc tesT.cpp -o test4e
tesT.cpp:3:2: error: invalid preprocessing directive #inlcude
#inlcude "reverse_import.h"
  ^~~~~~~

 

Някакви идеи ?

 

Благодаря,

Любо

 

0
C++ Programming
ThePSXHive avatar ThePSXHive 436 Точки
Best Answer

Правилното име на директивата е

#include 

Просто си разменил местата на 'c' и 'l'. Като оставим това настрани, не е задължително да извикваш функцията от зад. 8 от друг файл, защото нищо в условието не предполага, че това трябва да бъде реализирано с няколко файла. Единствено се изисква тази функция да фигурира във файлът за следващата задача, без значение дали ще бъде в source кода за последната или дали ще е част от друг файл.

1
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Колегата е отговорил супер, аз само искам да потвърдя, че за 9 задача не е нужно да викате функцията от файла на задача 8 - просто copy-paste функцията от задача 8 във задача 9. Ще учим как да ползваме множество файлове заедно в лекцията за Code Organization, но засега е достатъчно да работите в 1 файл и когато трябва да ползвате неща от други файлове (задачи), просто ги копирайте (освен ако в задачата не пише нещо изрично относно ползване на няколко файла).

Иначе адмирации, че се опитвате да правите неща, които не сме учили все още, това е правилният начин на мислене, когато учиш нещо :)

1
05/03/2017 16:48:30
rumenchooo avatar rumenchooo 0 Точки

Здравйте ,

Би било добре да се отделят по 10-20 мин за да се обяснят характерни неща от домашните .

Аз например не можах да разбера зад.9 , а не намерих и от къде да почерпя информация.

Курсът започва интересно.

Благодаря и успех.

 

0
Aguzelov avatar Aguzelov 78 Точки

Ако ти се заиграва може да разгледаш header files. Много е удобно защото не се налага да слагаш всички декларации на едно място.

 

cpp. не е единственото файлово разширение. Header file имат .h разширение (понякога .hpp) като целта му е да съхранява декларациите на други файлове.

Използване на standard library header file.

Следната програма:

#include <iostream>
int main()
{
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
използва header file iostream. Когато използваме #include <iostream>, ние искаме цялото садържание на header file с име iostream да бъде копирано в текущия файл. Header file обикновенно съдържа само декларации.Не се дефинира как нещо е импрементирано. Примерно cout само е деклариран в iostream header file. Имплрементирано е в c++ runtime support library, която автоматично се линква в кода на програмата по време на link phase.

c++ linker iostream

Писане на собствен header file.

Имаме 2 файла:
add.cpp:

int add(int x, int y)
{
    return x + y;
}

main.cpp:

#include <iostream>
int main()
{
    std::cout << "The sum of 3 and 4 is " << add(3, 4) << std::endl;
    return 0;
}


Първата част на header file е header guard.
Втората част е съдържанието на .h файла.

add.h:

// This is start of the header guard.  ADD_H can be any unique name.  By convention, we use the name of the header file.
#ifndef ADD_H
#define ADD_H
 
// This is the content of the .h file, which is where the declarations go
int add(int x, int y); // function prototype for add.h -- don't forget the semicolon!
 
// This is the end of the header guard
#endif


За да използваме .h трябва да го добавим с #include.

main.cpp:

#include <iostream>
#include "add.h"
 
int main()
{
    std::cout << "The sum of 3 and 4 is " << add(3, 4) << std::endl;
    return 0;
}

add.cpp си оставя същия.
Когато компилатора компилира #include "add.h" копира съдържанието на add.h в main.cpp на същото място, но тъйкато add.h съдържа прототип на функция add(), този прототип почва да се използва като декларация на add().Including header file
 

 

 

П.С. Съжалявам ако е малко(или доста) объркано, но и в моята глава е така.

0
ljbomir avatar ljbomir -1 Точки

Благодаря за отговорите !

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