|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.02.2012, 10:47 | #1 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
Visual C++ Express, ошибка LNK2019
У меня в проекте 3 файла: algorithm.h, algorithm.cpp (оба закинуты в папку \include), Task.cpp.
В файле algorithm.h следующие строки: Код:
Код:
Код:
Кто мне объяснит, в чем дело и как решить проблему? |
11.02.2012, 11:37 | #2 |
Участник клуба
Регистрация: 13.01.2009
Сообщений: 1,353
|
alexdelphi
algorithm.h: Код:
Код:
Код:
А ваша ошибка, называется ошибкой линковки.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
Последний раз редактировалось ImmortalAlexSan; 11.02.2012 в 11:40. |
11.02.2012, 11:39 | #3 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
В языке С++ есть стандартный заголовочный файл algorithm, поэтому не следует свои заголовочные файлы назывть именами, совпадающими со стандартными. Кроме того нельзя свои заголовочные файлы помещать в папку include, гда расположены стандартные заголовочные файлы. И к тому же в своем проекте свои собственные заголовочные файлы нужно помещать туда, де лежат и другие файлы вашего проекта, а в программе писать не #include <algorithm>, а #include "algorithm", то есть имя заголовочного файла брать в кавычки. Тогда его поиск компилятор будет осуществлять, начиная с папки вашего проекта. А когда же вы указываете в угловых скобках, то компилятор начинает искать заголовочный файл с папки стандартных заголовков.
Так что скорей всего компилятор находит именно стандартный заголовочный файл, а не ваш. Вы этого легко можетте проверить, подведя курсор к имени этого файла и щелкнцв правой кнопочкой мыши. В открывшемся контексом меню можно выбрать пункт просмотреть файл и убедиться, компилятор выбрал ваш файл или стандартный, в котором очевидно вашей функции нет.
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 11.02.2012 в 11:54. |
11.02.2012, 12:33 | #4 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
@Сыроежка:
Я сделал файл algorithm.h, а не algorithm, и в контекстном меню компилятор выдает мне именно мой файл. |
11.02.2012, 12:33 | #5 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
//-- удалено --
Последний раз редактировалось alexdelphi; 11.02.2012 в 12:35. |
11.02.2012, 12:45 | #6 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Поставьте в определение вашей функции тип линковки, то есть extern "C", так как по умолчанию предполагается extern "C++". То есть скорей всего компилятор считает объявление функции в заголовочном файле и определение функции - как объявление двух различных функций. В главном модуле он видет объявление extern "C" и не находит ее определение, так как определена лишь функция с линковкой extern "C++"
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 11.02.2012 в 12:49. |
|
11.02.2012, 13:27 | #7 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
|
|
11.02.2012, 13:43 | #8 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Надо не в папку заглядывать, так как в папке может быть все, что угодно. Это на усмотрение разработчиков компиляторов, использовать расширения и какие, или не использовать. А надо знать стандарт языка С++.
Так что ваш возглас про полный бред лишь демонстрирует ваше невежество. P.S. Да, и уберите в вашем профиле, что вы профессионал. А то вы просто этим смешите других! Специально для таких "профессионалов", как ты, умник, цитирую стандарт С++ "1 Header name preprocessing tokens shall only appear within a #include preprocessing directive (16.2). The sequences in both forms of header-names are mapped in an implementation-defined manner to headers or to external source file names as specified in 16.2."
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 11.02.2012 в 13:57. |
11.02.2012, 13:58 | #9 |
Новичок
Джуниор
Регистрация: 10.02.2012
Сообщений: 21
|
Добавьтесь ко мне в скайп denisevg2
|
11.02.2012, 14:31 | #10 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Так как вы сами написали в другой теме, что вы - новичок, то я с вами поделюсь знаниями, а то вы нарветесь на такого "профессионала", как этот невежественный и агрессивный "профессионал" p51x, и будете повторять за ним всякую глупость.
Почему стандарт говорит о том, что разработчкик компиляторов могут отображать имена заголовочных файлов, которые вы указываете в программе, на собственные имена? Дело в том, что когда появился С++, то используемые в нем имена стали дублироваться с именами языка С. Например, в С есть имя заголовочного файла string.h, то есть, если отбросить расширение .h, то именем является string. В то же время в С++ есть щаблонный класс basic_string, описание которого разработчиики помещали также в заголовочный файл с именем string. Как тогда отличить эти два заголовочных файла, ведь они содержат разные описания? Одни разработчики компиляторов в этом случае заголовочному файлу С++ string приписывали раширение .hpp, друние - hxx, третьи - еще как-нибудь по-другому на свой манер. Когда принимали стандарт С++, то стал вопрос, как унифицировать эти имена. Чтобы облегчить жизнь разработчииком компиляторов, которые уже использовали собственные расширения для заголовочных файлов С++, комитет пошел по следующему пути. Он разрешил разработчикам компиляторов в своих библиотеках оставлять те расширения файлов, которые они использовали. Но, с другой стороны, чтобы облегчить жизнь пользователям компиляторов, чтобы они не гадали, какое правильно нужно указывать расширение при включении заголовка с помощью директивы #include, стандарт принял общее название этих заголовочных файлов без расширений. Просто разработчики компиляторов отображали эти имена на собственные имена заголовочных файлов. Естественно, когда выходилли новые версии компиляторов, разработчики компиляторов также упрощали жизнь самим себе, заменяя собственные имена заголовочных файлов на те, которые вводит и видет пользователь в своем проекте. Тем не менее сттандарт по-прежнему разрешает разработчикам компиляторов использовать собственные имена. Поэтому когда вы пишите, например, в С++ заголовок <string>, то это совершенно не означает, что один к одному такое эи имя имеет заголовочный файл в библиотеке данного компилятора. Компилятор при компиляции вашего кода сам устанавливвает нужное соответсвие. Теперь вы этот вопрос лучще знаете, чем некий "профессионал" p51x.
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 11.02.2012 в 14:38. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Свой класс - ошибка линковки LNK2019: ссылка на неразрешенный внешний символ... | Egyptorium | Общие вопросы C/C++ | 7 | 11.01.2012 17:48 |
Visual C++ 9.0 Express Edition | Pizhon | Visual C++ | 25 | 09.09.2010 19:00 |
Проблема с windows visual styles в Visual studio 2008 express. | [awa | Visual C++ | 2 | 09.01.2010 06:05 |
visual c++ express | sinj | Софт | 0 | 08.08.2009 22:49 |
Visual C++ 2008 Express Edition | Grisman | Visual C++ | 1 | 02.03.2009 20:19 |