Форум программистов, компьютерный форум CyberForum.ru

Как можно функцию описаную в одном файле включить во все файлы проекта - C++

Восстановить пароль Регистрация
 
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
17.06.2013, 18:23     Как можно функцию описаную в одном файле включить во все файлы проекта #1
Задача такая
Определяю функцию в файле 1.сpp

C++
1
2
3
void test(){
int i=0;
}
как мне подключить этот файл ко всем файлам проекта чтобы исключить ошибку многократного включения этой функции
пробовал по всякому игаться с #pragma once но не помогает

Опишите плз схему, цель чтобы функция была в одном .cpp или .h файле и делая инклуд этого файла функция сразу была доступна.

Сейчас чтобы функция была доступна во всех файлах проекта я делаю описание функции в .cpp файле и описываю прототип функции в .h файле после чего включаю инклудом этот файл, после чего функция становиться доступна, хочу это все упростить и делать все в одном файле
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2013, 18:23     Как можно функцию описаную в одном файле включить во все файлы проекта
Посмотрите здесь:

CtrlAltDel - как можно отключить/включить? C++
C++ Задача с бинарным деревом (написать функцию, которая свяжет все узлы на одном уровне:)
Новичок С++, каким образом можно в функцию включить динамический массив? C++
Как включить в exe файл файлы dll C++
Написать функцию, заменяющую в текстовом файле все цифры и знаки “+” и “ - ” на пробелы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MastAKK
 Аватар для MastAKK
144 / 135 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
17.06.2013, 18:37     Как можно функцию описаную в одном файле включить во все файлы проекта #2
Нужно создать пространство имен с методом test и чтобы были инклуд гварды. Вот пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
//test.h
#ifndef TEST_H
#define TEST_H
 
#include <iostream>
 
namespace Test{
    void test() {
        std::cout << "OK!";
    }
}
#endif
C++
1
2
3
4
5
6
//main.cpp
#include "test.h"
 
int main(){
     Test::test();
}
Добавлено через 4 минуты
а ещё можно сделать так:
C++ (Qt)
1
2
3
4
5
6
7
#include "test.h"
 
using namespace Test;
 
int main(){
     test();
}
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
17.06.2013, 20:16  [ТС]     Как можно функцию описаную в одном файле включить во все файлы проекта #3
MastAKK,
использую Visual Studio 2010

Добавлено через 1 час 26 минут
Пример скомпилил но

проблема когда делаю инклуд test.h в другой .h файл скажем (stdafx.h)
И подключаю этот stdafx.h в .сpp файл то выдает ошибку

test.obj : error LNK2005: "void __cdecl Test::test(void)" (?test@Test@@YAXXZ) уже определен в stdafx.obj

а это очень не удобно, хотелось бы собрать все .h файлы с функциями в одном главном хедер файле и включать только его
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.06.2013, 20:52     Как можно функцию описаную в одном файле включить во все файлы проекта #4
Не нужно никаких пространств имен. Просто определить функцию в заголовочном файле и добавить защиту от повторного включения. cpp-файл не нужен в таком случае. Но это в общем случае изврат.
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
17.06.2013, 21:52  [ТС]     Как можно функцию описаную в одном файле включить во все файлы проекта #5
Tulosba,
можно пример схемы как это сделать ?

я пробовал и #pragma once и #ifndef #define
в h-файле с функцией прописывать но это мне постоянно дает ошибку
типа
test.obj : error LNK2005: "void __cdecl test(void)" (?test@@YAXXZ) уже определен в stdafx.obj

и про изврат можно подробней, как лучше то сделать ?

сейчас постоянно обновляю два файла срр файл с телом функции и h файл с прототипом этой функции, вот это изврат
куда удобней все делать в одном файле, но не получаеться
я не против и прототип и тело функции писать в одном файле, но тоже не пашет
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.06.2013, 22:04     Как можно функцию описаную в одном файле включить во все файлы проекта #6
C++
1
2
3
4
5
6
7
8
//myheader.h
#ifndef MY_HEADER_H
#define MY_HEADER_H
 
void test(){
int i=0;
}
#endif
включайте этот файл куда надо и вызывайте test();
Цитата Сообщение от nill Посмотреть сообщение
сейчас постоянно обновляю два файла срр файл с телом функции и h файл с прототипом этой функции, вот это изврат
Вас пугает в процессе разработки держать заголовочный файл в соответствии с файлом реализации, или что?
Цитата Сообщение от nill Посмотреть сообщение
и про изврат можно подробней, как лучше то сделать ?
Изврат в том, что в каждом модуле, куда будет включен хедер, будет своя версия функций. Т.е. итоговый файл разбухнет из-за многократного дублирования кода.
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
17.06.2013, 22:19  [ТС]     Как можно функцию описаную в одном файле включить во все файлы проекта #7
Tulosba,


этот пример не работает, создавал пустое консольное приложение в VS2010

вот проект http://webfile.ru/6568268
в упор не вижу в чем проблема
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.06.2013, 22:41     Как можно функцию описаную в одном файле включить во все файлы проекта #8
nill, добавьте inline или static для функции:
C++
1
2
3
static void test(){
    int i=0;
}
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
17.06.2013, 23:51  [ТС]     Как можно функцию описаную в одном файле включить во все файлы проекта #9
Tulosba,
Вот теперь заработало спасибо!

А если кратко в чем отличия inline и static, как то мало инфы про них

И еще

Вас пугает в процессе разработки держать заголовочный файл в соответствии с файлом реализации, или что?
Если речь о том что для каждого срр файла с функциями нужен свой h файл то да пугает, это надо под каждую функцию делать ее прототип в h файле, очень не удобно и долго когда в функции много входящих параметров. Что тут удобного то ?


Изврат в том, что в каждом модуле, куда будет включен хедер, будет своя версия функций. Т.е. итоговый файл разбухнет из-за многократного дублирования кода.
То есть скомпилированное exe будет большего размера и все ? на скорость работы программы это не повлияет ?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.06.2013, 11:09     Как можно функцию описаную в одном файле включить во все файлы проекта #10
Цитата Сообщение от nill Посмотреть сообщение
А если кратко в чем отличия inline и static, как то мало инфы про них
static делает функцию локальной относительно модуля (единицы трансляции), т.е. в других модулях она будет недоступна.
inline встраивает тело функции вместо ее вызова. Но это всего лишь рекомендация компилятору, т.е. встраивание может быть и не достигнуто.

Цитата Сообщение от nill Посмотреть сообщение
Что тут удобного то ?
Это необходимо для обеспечения однопроходного режима компилятора. Может быть Вы на какой-нибудь C# засмотрелись. Там заголовочных файлов нет.

Цитата Сообщение от nill Посмотреть сообщение
То есть скомпилированное exe будет большего размера и все ? на скорость работы программы это не повлияет ?
Зато точно повлияет на скорость компиляции и время загрузки программы. В общем, дублирование кода в любых проявлениях, в большинстве случаев - зло.
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
18.06.2013, 17:04  [ТС]     Как можно функцию описаную в одном файле включить во все файлы проекта #11
static делает функцию локальной относительно модуля (единицы трансляции), т.е. в других модулях она будет недоступна.
inline встраивает тело функции вместо ее вызова. Но это всего лишь рекомендация компилятору, т.е. встраивание может быть и не достигнуто.
Не могу понять а что же лучше использовать ?
Схема использования такая в гланывый .h файл будет включены инклуды на .сpp файлы с функциями и ко всем файлам проекта будет подключен только один главный .h файл, то есть во всех файлах проекта будут доступны все функции
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2013, 17:21     Как можно функцию описаную в одном файле включить во все файлы проекта
Еще ссылки по теме:

Как правильно свернуть в функцию? И по возможности включить поддержку кирилицы C++
Сравнение слов в одном файле со словами в другом файле C++
C++ Как создать 2 проекта в одном solution в Visual Studio?

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.06.2013, 17:21     Как можно функцию описаную в одном файле включить во все файлы проекта #12
Цитата Сообщение от nill Посмотреть сообщение
будет подключен только один главный .h файл, то есть во всех файлах проекта будут доступны все функции
Для таких действий имеет смысл иметь какой-то инструмент, который будет автоматически генерить такой хедер.
Нечто подобное я видел под QNX в Photon Application Builder. Генерился файл proto.h с прототипами всех не static функций проекта.
Yandex
Объявления
18.06.2013, 17:21     Как можно функцию описаную в одном файле включить во все файлы проекта
Ответ Создать тему
Опции темы

Текущее время: 21:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru