Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 151
#1

Вызов функции из другого файла - C++

10.01.2013, 22:33. Просмотров 3286. Ответов 10
Метки нет (Все метки)

Знаю этот вопрос, задавался не раз(возможно), но поиск показал одну тему в которой, небыло дано ясного ответа...

Так вот в чем вопрос:

Есть файл main.cpp
C++
1
2
3
4
5
6
#include "menu.cpp"
 
int main()
{
    menu();
}
И файл menu.cpp ( в тойже папке)
C++
1
2
3
4
void menu()
{
    //...
}
Так вот: когда все это компилирую, то мне пишет, что эта функция menu() задается много раз!


P.S.

main.cpp
C++
1
2
3
4
5
6
7
8
#include "menu.cpp"
 
extern menu();
 
int main()
{
    menu();
}

menu.cpp
C++
1
2
3
4
void menu()
{
    //...
}
extern menu(); НЕ работает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 22:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вызов функции из другого файла (C++):

Вызов функции из другого файла. - C++
Всем привет!) У меня такой вопрос ,допустим есть main.cpp , и есть der.cpp .В der.cpp есть функция getfr() ,так вот как мне из ...

Вызов функции из другого файла - C++
Ребят! Привет! Я новый на этом форуме. Мне стало интересно как заставить программу перейти с одного кода (после выполнения) на другой (не...

вызов функции из другого файла - C++
мне необходимо вызвать функцию из другого файла (функция заполнения бинарного файла структурой, в будущем будет еще много функций) но...

Вызов функции класса из другого файла.(Модель компиляции) - C++
Здравствуйте! Пишу движек игры, написал большую часто кода по которой задумывалось примерно то что тут ниже. не могу понять как...

Подключение функции из другого файла - C++
Есть три файла: main.cpp, view.cpp, view.hpp. #include "view.hpp" int main() { draw();

Создание и вызов файла с описанием функции - C++
#include "iostream" #include <stdlib.h> #include <time.h> #include <ctype.h> #include <string.h> void task(int ); ...

10
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
10.01.2013, 22:46 #2
прототипы нужно писать в заголовочных файлах (.h)
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,803
Записей в блоге: 3
Завершенные тесты: 1
10.01.2013, 22:46 #3
C++
1
2
3
4
5
6
//#include "menu.cpp"//Кто так учил делать? Уберите эту строчку от греха подальше
 extern void menu();
int main()
{
    menu();
}
или заголовочный фаил делайте.
Почитайте про раздельную компиляцию, а еще лучше поработайте с MinGW(GCC)
1
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
10.01.2013, 22:58 #4
добавь файл "menu.h" записав в него:

C++
1
2
3
4
5
6
#ifndef MENU_H
#define MENU_H
 
void menu();
 
#endif
0
Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 151
10.01.2013, 23:05  [ТС] #5
незнаю, но то что вы написали вызывает гору ошибок

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdlib>
#include <iostream>
#include <windows.h>  //CharToOem
#include <conio.h>  //_getch()
 
#define rus(str) CharToOem(str,vixod); //Ïñåâäî ГґГіГ*êöèÿ, äëÿ ïåðåâîäГ* êîäèðîâêè
#define strelka "<-----"
#include "menu.h"
 
using namespace std;
 
char vixod[512]; //ÏåðåìåГ*Г*Г*Гї ñîäåðæГ*Г№Г*Гї ГђГіГ±Г±ГЄГЁГ© ГІГҐГЄГ±ГІ
 
extern void menu();
 
int main(int argc, char *argv[])
{
    menu(); //âûçûâГ*ГҐГ¬ ìåГ*Гѕ èãðû
    system("PAUSE");
    return EXIT_SUCCESS;
}
menu.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef MENU_H
#define MENU_H
#include <iostream>
#define strelka "<-----"
#define rus(str) CharToOem(str,vixod); //Ïñåâäî ГґГіГ*êöèÿ, äëÿ ïåðåâîäГ* êîäèðîâêè
void menu() 
{
    system("cls"); //ГЋГ·ГЁГ№Г*ГҐГ¬ ГЅГЄГ°Г*Г*
    
    int ch=0,chose=1;
    bool exit=true;
    char *vibor[3];
    vibor[1]=strelka; vibor[2]=""; vibor[3]="";
    
    while(exit)
    {
        system("cls");
        rus("Ìîðñêîé áîé Гў ГЄГ®Г*ñîëå.\n*****_ГЊГҐГ*Гѕ:_*****\n"); cout << vixod << endl;
        rus("ÈãðГ*ГІГј"); cout << vixod << vibor[1] << endl;
        rus("ГЏГ°Г*ГўГЁГ«Г*"); cout << vixod << vibor[2] << endl;
        rus("ГЌГ*ñòðîéêè"); cout << vixod << vibor[3] << endl;
        cout << ch;
        ch=_getch();
        switch(ch)
        {
            case 80: //ГўГ*ГЁГ§
                vibor[chose]="";
                if (chose>2){chose=1;} else{chose++;}
                vibor[chose]=strelka;
            break;
            
            case 72: //ââåðõ
                vibor[chose]="";
                if (chose<2){chose=3;} else{chose--;}
                vibor[chose]=strelka;
            break;
            
            case 13: //enter
                exit=false;
            break;
        }
        
        //if(chose==1){game();} else{if(chose==2){pravila();} else{setting();}}
    }
} 
 
#endif
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,803
Записей в блоге: 3
Завершенные тесты: 1
10.01.2013, 23:08 #6
Цитата Сообщение от Xipxop Посмотреть сообщение
незнаю, но то что вы написали вызывает гору ошибок
Открываете книги и читаете главы "Заголовочные файлы", "Линковка программы", "Внешняя линковка", "Раздельная компиляция","Прототипы функций". Вопрос отпадет сам собой. А толку объяснять Вам все это на форуме?
0
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
10.01.2013, 23:09 #7
Xipxop, напишите что то одно

Добавлено через 29 секунд
или h или extern
1
Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 151
10.01.2013, 23:16  [ТС] #8
Спасибо все понял, (я #include "menu.h" пихал до using namespace std; и из-за этого и ошибка)


Croessmah, толк есть, по книгам учится не у каждого получается.
P.S. Из того что я понял, для Croessmah
мы в отдельном файле сделали define и прикрепили его в другой, при компиляции получаем 1 файл, где функция menu() будет подставлена на место её иницилизации
0
Toshkarik
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
10.01.2013, 23:18 #9
Не нужно писать extern. Вполне будет работать и так:

C++
1
2
3
4
5
6
7
8
//main.cpp
void menu();
 
int main() {
   menu();
 
   return 0;
}
C++
1
2
3
4
5
6
//menu.cpp
#include <iostream>
 
void menu() {
   std::cout << "hello from menu" << std::endl;
}
Bash
1
g++ main.cpp menu.cpp -o main
Заголовочные файлы, по больше части, нужны для согласования.
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
10.01.2013, 23:38 #10
функции по умолчанию и так все extern
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,803
Записей в блоге: 3
Завершенные тесты: 1
10.01.2013, 23:43 #11
Цитата Сообщение от coloc Посмотреть сообщение
функции по умолчанию и так все extern
прототипы. А со static, так вообще не видно будет.
0
10.01.2013, 23:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2013, 23:43
Привет! Вот еще темы с ответами:

Использоваение static функции из другого файла - C++
Всем добра! мне дали файл cmd.cpp с функцией: static void matchCommandParameters(int argc, char **argv, int * v, int * u, int *...

Вызов из разных потоков функции чтения из файла, dll - C++
Доброго времени суток. Помогите пожалуйста написать программу, вот задание: Вызов из разных потоков функции чтения из файла. Функция...

Как сделать доступными функции из другого проекта инклудом .h файла - C++
В одном решении Visual Studio 2010 есть два проекта, мне понадобилось включить функции и глобальные переменные из проекта №1 в проекта №2 ....

Считать одномерный массив с файла, отсортировать его использую рекурсивный вызов функции - C++
Нужно написать прогу на Си, самую элементарную... Считать одномерный массив с файла, отсортировать его использую рекурсивный вызов функции,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru