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

Проблема именно с видимостью функций другим файлам - 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-ий двухмерный массив! Помогите написать код, изучаю с++ уже 3 месяца, вот встала задача, ломаю мозг не пойму как решить. Заранее спасибо!:)
Неразрешенный внешний символ при Opendir ("D://") C++
Всем привет, имеется код в пару строчек, почему пишет ошибки ?? конкретно эму ненравится это dir = opendir("D://"); , но почему?? Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "struct dir_struct * __cdecl opendir(char const *)" (?opendir@@YAPAUdir_struct@@PBD@Z) в функции _main C:\Users\Admin\Documents\Visual Studio 2012\Projects\Проект12\Проект12\sours.obj Проект12...
C++ Оформление списка в виде структуры, исправить ошибку в коде http://www.cyberforum.ru/cpp-beginners/thread1098287.html
Здравствуйте, есть проблема, нужно оформить список в виде структуры, но вот есть ошибка в строке, не могу понять в чем, но при компиляции выдает ошибку в 13 строке. Помогите пожалуйста #include <iostream> #include <stdio.h> #include <conio.h> #include <string.h> #include <locale.h> struct list { char number; char name;
C++ Найти сумму элементов в тех столбцах матрицы, которые содержат хотя бы один отрицательный элемент Дана вещественная прямоугольная матрица A, размером nxm. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. #include <iostream> #include <stdio.h> #define N 30 int main(void) // или вот тут нужно int main(argh и т.д.....) { подробнее

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

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