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

Проблема именно с видимостью функций другим файлам - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сортировка чисел в файле http://www.cyberforum.ru/cpp-beginners/thread1098343.html
В последовательном текстовом файле построчно занесены до 50 целых положительных чисел (каждое число <10000). Каждое новое число – в новой строке. Получить файл, в котором все числа исходного файла...
C++ Нахождение чётных и нечётн. чисел(с использованием динамических массивов) Попытался написать прогу но она не работает( #include <iostream> #include <conio.h> using namespace std; void eo(int n); void main(){ http://www.cyberforum.ru/cpp-beginners/thread1098317.html
C++ Массивы. Отсортировать 100 самых больших чисел в порядке убывания и добавить отсортированные числа в созданный 3 массив
Имеем 2 дввухмерных массива 10х10 с случайными часлами не выше 1000. Из этих 2-х массивов отсортировать 100 самых больших чисел в порядке убывания и добавить отсортированные числа в созданный 3-ий...
Неразрешенный внешний символ при Opendir ("D://") C++
Всем привет, имеется код в пару строчек, почему пишет ошибки ?? конкретно эму ненравится это dir = opendir("D://"); , но почему?? Ошибка 1 error LNK2019: ссылка на неразрешенный внешний...
C++ Оформление списка в виде структуры, исправить ошибку в коде http://www.cyberforum.ru/cpp-beginners/thread1098287.html
Здравствуйте, есть проблема, нужно оформить список в виде структуры, но вот есть ошибка в строке, не могу понять в чем, но при компиляции выдает ошибку в 13 строке. Помогите пожалуйста #include...
C++ Найти сумму элементов в тех столбцах матрицы, которые содержат хотя бы один отрицательный элемент Дана вещественная прямоугольная матрица A, размером nxm. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. #include <iostream> #include <stdio.h> ... подробнее

Показать сообщение отдельно
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
18.02.2014, 00:25
Цитата Сообщение от snyppimylt Посмотреть сообщение
тоже самое.
То, что выше посоветовали из другой оперы. Суть в понимании что такое #include и заголовочный файл.
Попробую максимально просто объяснить.
Вот есть у тебя файл А, ты подключаешь туда через include файл B. Это значит, что все содержимое файла B становится частью файла А.
Теперь есть у тебя файл С и ты подключаешь туда опять же файл B. Происходит тоже самое.
Теперь, после этого ты получил два файла, которое абсолютно полностью содержат в себе содержимое файла B (в нашем случае - функцию). т.к. для функций в С++ по умолчанию используется внешнее связывание, то линковщик, видя две одинаковые функции ругается на дубликат.

Побороть это можно по-разному.
Самый нормальный способ - вынести тело функции в отдельный cpp. Тогда повтора тела функции не будет, в заголовочном файле будет только прототип.
Еще можно объявить функцию static - тогда мы запретим внешнее связывание (external linkage) для нее. Это называется внутреннее связывание (internal linkage), когда имя доступно только внутри конкретной единицы трансляции. Функции будет две, по одной в каждой единице трансляции (cpp, модуле), но линкер не будет их друг с другом соотносить, т.к. они во вне не смотрят.
Можно объявить функцию inline - как побочный эффект, inline также устанавливает внутреннее связывание.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.