![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Proger89 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Доброго времени суток.
В процесе написания проекта, я создал файл содержаший константы. В данный файл входит массив указателей на функции:
Файл BuildInCmds.h - содержит интерфейсы функций для массива, CmdsFuncs. BuildInCmds.h:
Когда я пытаюсь добавить CmdList.h (#include "CmdList.h") в другой файл, то во время линковки возникает ошибка: unresolved external symbol "void __cdecl ExecPwd(wchar_t * *,int,wchar_t *)" (?ExecPwd@@YAXPAPA_WHPA_W@Z) Подскажите пожалуста, с чем это может быть связано? Как решить эту проблему? Спасибо за внимание. |
||||
|
|||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Proger89, компилятор указывает на необходимость определения символа ExecPwd, поскольку он описан, но не определен. То есть функция void ExecPwd(LPWSTR *ppWordArray, int nWordsNum, LPWSTR pNewCommand); должна иметь тело.
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Proger89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Решение найдено! Перезапустил студию и проблема исчезла
Это сообщение отредактировал(а) Proger89 - 19.8.2008, 19:21 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Proger89,
вообще говоря определения должны быть в *.c/*.cpp файлах -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Proger89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Простите. Но где вы видете определение (реализацию) функций в .h/.hpp файлах? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Proger89,
а где я говорил про функции? я говорил про определения в данном случае определением является CmdsFuncs -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Proger89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Но что в этом плохого? Зачем выносить определение контант в cpp файл? |
|||
|
||||
| MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
1. не определение констант, а определение неконстанты 2. адрес ExecPwd в рамках определения не является константой во время компиляции правильно так
иначе при включении CmdList.h в более чем 2 модуля и использовании CmdsFuncs в них будет ошибка сборки -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
разве при определении констант такой ошибки не должно быть? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
для POD-констант нет -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
интересно, как оно реализовано? компилятор, если видит, что определяется ПОД константа, просто не выделяет для нее память, а оставляет это на совести линковщика? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
1. значение константы подставляется на этапе компиляции 2. константа представляет собой локальный символ, не видимый за пределами модуля (для сохранения семантики const_cast<TYPE&>(VARIABLE) = ...) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ясно, спасибо
|
|||
|
||||
| UnrealMan |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Ты забыл уточнить, какое именно определение имеется в виду.
Адрес функции может быть использован как константное выражение:
Этого вполне достаточно для осуществления статической инициализации. Не должно, т.к. любой глобальный константный объект, объявленный как const и не объявленный как extern, имеет внутреннее связывание. Т.е. в заголовочном файле инициализация
вполне законна. Это сообщение отредактировал(а) UnrealMan - 20.8.2008, 14:08 |
||||||||||
|
|||||||||||
| Proger89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Спасибо всем за обсуждение.
Но, что такое POD-константы? Google не помог мне в этом. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |