![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| NOT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 18.6.2005 Где: UA::CK Репутация: нет Всего: нет |
Здравствуйте.
Компилятор MSVC 6.0 Есть файл CGameEngine.h с описанием двух классов: класса CGameMesh(переменные и состояния объекта игры) и класс CGameEngine(), в котором объявлены экземпляр CGameMesh GameMeshMatrix[120] и функции, работающие с этим массивом эземпляров(CGameMesh GameMeshMatrix[120]). Этот файл подключается в файл описания CGameEngine.cpp и WinMain.cpp. Если эти функции объявлены как "inline", то выдает ошибку: Linking... WinMain.obj : error LNK2001: unresolved external symbol "public: void __thiscall CGameEngine::ScaleMeshesUp(int,float,float)" (?ScaleMeshesUp@CGameEngine@@QAEXHMM@Z) Debug/CLASS.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. CLASS.exe - 2 error(s), 0 warning(s) если как обычные - не выдает. Вторая проблема: в файле WinMain создан экземпляр CGameEngine GameEngine. Когда в WinMain.cpp пишу "GameEngine.GameMeshMatrix[от 0 до 119]. ", то ничего не отображается( должны отображаться записанные переменные класса). Когда создал проект заново и перенес в него все файлы и подключения, то начало отображаться. Почему так? Хочу разобраться. ------- Большое спасибо. |
|||
|
||||
| Darhazer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: 2 Всего: 29 |
Насчет inline
Нельзя пользувать inline функцию в другом класе/файлсе, кроме в том, в котором их дефинировал Т.е. если в CGameMesh имееш inline функцию, ее можеш пользувать только в CGameMesh, а в WinMain нельзя! -------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
|||
|
||||
| NOT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 18.6.2005 Где: UA::CK Репутация: нет Всего: нет |
Darhazer
Спасибо. Правда, так и есть, только что попробовал. Спасибо. Это минус C++ или моей архитектуры? |
|||
|
||||
| Darhazer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: 2 Всего: 29 |
это минус твоей архитектури
Подумай: что значить inline это значить что вместо визове функции ти там поставил тело функции А если эта функция - метод класа, как ты будеш пользуват ее без самого класа? это возможно только для static метода.... -------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
|||
|
||||
| NOT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 18.6.2005 Где: UA::CK Репутация: нет Всего: нет |
Darhazer
А если эта функция - метод класа, как ты будеш пользуват ее без самого класа?[/quote] Так я создаю экземпляр в файле(WinMain) где она вызывается, полуучается
|
|||
|
||||
| Darhazer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: 2 Всего: 29 |
Да, но если функция inline, то вместо Func() в коде ставиться код функции...
И у нее уже нет доступа к GameEngine ;) -------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
|||
|
||||
| Neitron |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 3.10.2005 Где: Москва Репутация: 2 Всего: 5 |
Эх многие новички, так и пытаются многое непонимание свалить на косяк стандарта.
-------------------- Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей. Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ |
|||
|
||||
| NOT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 18.6.2005 Где: UA::CK Репутация: нет Всего: нет |
Darhazer
Логично. Для меня это новость, т.к. никогда с таким не сталкивался. Neitron Неумение отвечать прямо на поставленный вопрос не подразумевает обязательного ответа... |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Ага. Логика -великая вещь А по теме - Darhazer сказал чушь Нет таких ограничений в С++ -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| NOT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 18.6.2005 Где: UA::CK Репутация: нет Всего: нет |
Vyacheslav
Что итмеешь ввиду? я могу делать как делал и ошибки не будет? В простенькой программе по анологии ошибку выбивает тоже... |
|||
|
||||
| Darhazer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: 2 Всего: 29 |
По теме
Так что это может быт решение проблеми ;) А насчет есть ли таких ограничений в C++ или нет - проверим Это сообщение отредактировал(а) Darhazer - 23.11.2005, 16:59 -------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Хмм... Так вот оно что. Сталкивался я как-то с такой штукой.
Вполне логично, что раз inline функция находится в другой единице компиляции, то компилятор не может вставить её код место вызова. Так же логично, что если она будет в .h файле, то она будет существовать во всех единицах компиляции, её использующих. Добавлено @ 16:59 Это как с шаблонами Это сообщение отредактировал(а) Дрон - 23.11.2005, 16:58 -------------------- Да. Именно так. |
|||
|
||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Давай код простенькой программы, которая не собирается. Дело в том, что по стандарту inline-функция отличается от обычной только на уровне компиляции. И все. Покажи как объявлял. Самый первый вариант : тело inline определял в cpp -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| NOT |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 18.6.2005 Где: UA::CK Репутация: нет Всего: нет |
Vyacheslav
Извините, электричество перебило. h-file:
cpp-file:
prog-file:
|
||||||
|
|||||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
NOT
Всё понятно. Так делать нельзя. Раз уж пишешь inline, так уж будь добр реализацию метода в *.h файл писать. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |