|
5 / 5 / 0
Регистрация: 15.09.2010
Сообщений: 25
|
|
Ошибки на ровном месте (VS2010)25.06.2011, 17:31. Показов 1338. Ответов 7
Метки нет (Все метки)
В общем, сделал класс разбитый на два файла (.h и .cpp). Часть методов этого класса определена прямо в его теле при его объявлении (т.е. в h-файле). Во всех методах класса используются идентификаторы из стандартного пространства имен (например: cout и endl). В cpp-файле указано using namespace std. Все компилировалось нормально до того момента, как я решил добавить в класс виртуальный метод, который также использует эти идентификаторы. Этот метод я определил в объявлении класса в h-файле. После добавления этого метода посыпались сообщения об ошибке "незадекларированный идентификатор" с указанием на эти идентификаторы в виртуальном методе. Почему так происходит? Использование этих же идентификаторов в обычных (не виртуальных) методах этого класса также определенных в объявлении класса не вызывает у компилятора возражений. Приходится либо в определении виртуальной функции писать эти идентификаторы через префикс std::, либо переносить объявление класса в cpp-файл (сразу после using namespace std); в обоих случаях странные ошибки пропадают. Почему так происходит? Это баг компилятора, или я чего-то не знаю?
0
|
|
| 25.06.2011, 17:31 | |
|
Ответы с готовыми решениями:
7
Segfault на ровном месте Не создаётся объект string на ровном месте! Почему? Деление чисел. Ошибка на ровном месте. Не пойму почему. |
|
58 / 50 / 16
Регистрация: 23.06.2011
Сообщений: 122
|
||||||
| 25.06.2011, 18:30 | ||||||
|
попробуй в хэд-файле прописать
1
|
||||||
|
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
|
|
| 25.06.2011, 18:36 | |
|
запросто распространяет если объявить в глобальной области видимости хидера
1
|
|
|
58 / 50 / 16
Регистрация: 23.06.2011
Сообщений: 122
|
|
| 25.06.2011, 18:53 | |
|
но если объявление в cpp то в h виден не будет...или я ошибаюсь..?
0
|
|
|
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
|
|
| 25.06.2011, 19:08 | |
|
не ошибаешься, ты ведь .cpp не включаешь никуда
0
|
|
|
5 / 5 / 0
Регистрация: 15.09.2010
Сообщений: 25
|
|||
| 25.06.2011, 19:32 [ТС] | |||
|
Добавлено через 20 минут Оказалось, что я не верно понял и описал ситуацию, т.к. плохо разобрался в ней. Сорри... На самом деле, в программе есть два класса: простой и шаблонный. Использование указанных идентификаторов в простом классе (в любом методе определенном прямо в теле класса) приводит к ошибке. А вот на использование этих идентификаторов в методах шаблонного класса, определенных прямо в его теле, компилятор не ругается. З.Ы: Оба класса объявлены в одном заголовочном файле.
0
|
|||
|
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
|
||
| 25.06.2011, 19:36 | ||
|
Oleg_SK, по какому критерию вы выбираете место реализации функций? Для этого, по всем правилам и нужен .cpp файл. Как исключение можно предложить в .h файле реализовывать только утилиты класса и чисто виртуальные функции. Как было описано выше - с этими функциями проблем нет. Все остальные функции (даже inline) ИМХО должны реализовываться в .cpp файле. Это и упрощает сопровождение и улучшает структуру программы...
1
|
||
|
Заблокирован
|
|
| 25.06.2011, 21:54 | |
|
1.
В хедере только декларации. В спп - определения. Если вы в хедере половину только объявите, а другую половину - ещё и определите. А в спп определите только то, что не было определено в хедере, то при попытке использовать такой модуль в многофайловом проекте, компилятор ЗАСТАВИТ вас убрать все определения из хедера и перенести их в спп. Привыкайте заранее: в хедере только объявления. Никаких определений. Исключение составляют шаблоны, которые объявляются и определяются прям в хедере. 2. using namespace std; //опасная вещь. Писать такую строчку нужно очень аккуратно, //на максимально короткой дистанции. Где нибудь внутри маленькой функции. Присутствие подобной записи в хэдере - мина замедленного действия.
1
|
|
| 25.06.2011, 21:54 | |
|
Помогаю со студенческими работами здесь
8
считываю текстовый файл в строку, программа вылетает на ровном месте, почему? "error: expected unqualified-id at end of input" на ровном месте
Застрял на ровном месте Зависание на ровном месте Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение
Это мой обзор планшета X220 с точки зрения школьника.
Недавно я решила попытаться уменьшить свой. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|