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

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

Войти
Регистрация
Восстановить пароль
 
nill
9 / 9 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

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

17.06.2013, 18:23. Просмотров 695. Ответов 11
Метки нет (Все метки)

Задача такая
Определяю функцию в файле 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     Как можно функцию описаную в одном файле включить во все файлы проекта
Посмотрите здесь:

Как создать 2 проекта в одном solution в Visual Studio? - C++
В задании указано, что в solution должно быть 2 проекта, один чтобы читать данные, введенные с клавиатуры и записывать в бинарынй файл, а...

Как включить в exe файл файлы dll - C++
как включить в exe файл файлы dll чтобы на других компьютерах при запуске программы не было ошибки "на компьютере нет blablabla.dll

Задача с бинарным деревом (написать функцию, которая свяжет все узлы на одном уровне:) - C++
Есть бинарное дерево: struct node { int n; // value of node struct node *left; // left subtree struct node *right; // right...

Как сделать, чтобы два проекта с разной кодировкой работали в одном объединённом проекте? - C++
Добрый день подскажите есть два проекта в одном стоит многобайтовая кодировка в другом юникод, по отдельности все нормально компилируется...

CtrlAltDel - как можно отключить/включить? - C++
Хочу, чтобы моё приложение блокировало 'волшебные комбинации', как то Ctrl+Alt+Del, Alt+Tab и т.п. Буду весьма признателен за помощь...

Как правильно свернуть в функцию? И по возможности включить поддержку кирилицы - C++
Задача 1. Начиная от цикла (от места, где начинается непосредственно работа со строками) завернуть в функцию. И ещё, может кто посоветует...

Написать функцию, заменяющую в текстовом файле все цифры и знаки “+” и “ - ” на пробелы - C++
1 Написать функцию, добавляющую литеру “с” в начало и конец текстового файла. 2 Написать функцию, заменяющую в текстовом файле все...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MastAKK
145 / 136 / 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
9 / 9 / 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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.06.2013, 20:52     Как можно функцию описаную в одном файле включить во все файлы проекта #4
Не нужно никаких пространств имен. Просто определить функцию в заголовочном файле и добавить защиту от повторного включения. cpp-файл не нужен в таком случае. Но это в общем случае изврат.
nill
9 / 9 / 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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
9 / 9 / 0
Регистрация: 16.08.2009
Сообщений: 417
17.06.2013, 22:19  [ТС]     Как можно функцию описаную в одном файле включить во все файлы проекта #7
Tulosba,


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

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

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

И еще

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


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

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

Цитата Сообщение от nill Посмотреть сообщение
То есть скомпилированное exe будет большего размера и все ? на скорость работы программы это не повлияет ?
Зато точно повлияет на скорость компиляции и время загрузки программы. В общем, дублирование кода в любых проявлениях, в большинстве случаев - зло.
nill
9 / 9 / 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++
Дана квадратная матрица A порядка n. Составить программу, которая находит минимальный элемент и все элементы, расположение в одном ряду и в...

Файлы. Как установить позицию в файле? - C++
Как установить позицию в файле с которой начнется, например, чтение данных. (Нужно установить в начало).

LNK2019 два проекта в одном решении (MSVC gtest) - C++
Собственно собрал gtest 1.7.0 static debug с ключом /MTd. Создал решение. Добавил в него проект, в котором есть функтор class...

Сборка проекта, объявление и инициализация конструкторов в одном месте - C++
Всем привет! Столкнулся с такой проблемой как &quot;много файловая&quot; программа. А именно если конструктор и диструктор описывать например в A.h...

Найти в файле все слова, которые можно сложить из букв заданного слова - C++
Дано слово р и файл f.найти в файле f все слова которые можна сложить с букв слова р.


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

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

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