|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
Реакція на помилки Корисно відкомпілювати і запустити додаток в незавершеному стані, оскільки це дозволить побачити, як виявляються помилки і недомовки. Процес компіляції і збірки спільно називається побудовою (Build) проекту. Найшвидшим способом побудувати і запустити проект є введення Ctrl+F5 і згода з необхідністю повторення всього процесу. Хід процесу компіляції і збірки проекту освітлює і коментується Studio.Net у вікні Output. Повідомлення про помилки, виявлені на стадії побудови, також виводяться в цьому вікні, але після закінчення процесу з'явиться діалогове вікно з повідомленням про наявність помилок. Тепер ви повинні вибрати: чи продовжувати компоновку чи ні. Розумним вибором буде No. Тепер повідомлення про помилки в детальнішому вигляді з'являються у вікні Task List, яке має універсальний характер, але в нашому окремому випадку використовується для відображення помилок компіляції. Вікно має вигляд списку, який допомагає ідентифікувати і локалізувати помилки. Виділивши помилку в списку, ви можете натискувати F1 і отримати по ній детальнішу довідку. У нашому випадку, якщо не було помилок введення, ймовірно, з'являться більше 10 помилок, першу з яких приведемо тут: error C2143: syntax error : missing ';' before '<' C:\My Projects\My\MyDoc.h(38) Тут мені хочеться поговорити про те, як вивудити з цих повідомлень більш менш точну вказівку на дійсне місце розташування і причину помилки або помилок. Перш за все треба психологічно підготуватися до того, що помилки завжди і неминуче переслідуватимуть вас. Якщо код містить більше 20 операторів, то він не може бути створений і введений без помилок. Якщо ж код містить більше 5000 операторів, то він завжди міститиме їх. Це майже аксіома (з долею іронії). Розробник програмного забезпечення вимушений велику частину життя проводити за комп'ютером, нескінченно повторюючи ланцюжок одних і тих же дій, які складають суть процесу відладки додатка. Чим спокійніше ви відноситеся до своїх помилок, тим швидше ви з ними розправитеся. Отже, перше повідомлення говорить нам про те, що відсутній крапка з комою перед знаком ' <' в рядку 38 файлу з описом класу CMyDoc. Зробіть подвійне клацання па цьому повідомленні і курсор у вікні MyDoc.h перейде на рядок vector<CPoint> m_Points; Якщо у вас немає досвіду, то отримане повідомлення навряд чи розкриє вам причину помилки. Але є ще багато інших повідомлень. Оскільки компілятор має властивість неодноразово і по-різному повідомляти про одну і ту ж помилку, то, можливо, доведеться проаналізувати всі повідомлення, перш ніж визнати себе переможеним. Studio.Net допомагає вам тим, що повідомлення про помилки можуть бути відсортовані по різних атрибутах, і це інколи є ключем до якнайшвидшої їх локалізації.
Мал. 1.6. Вікно Task List із списком помилок Скористайтеся контекстним меню вікна Task List і виберіть команду Sort by > Category. В результаті її виконання на перше місце потрапляє повідомлення: error C2238: unexpected token (s) preceding ";" ... Це приблизно означає: «Невідома лексема передує крапці з комою». Таке повідомлення, на мій погляд, значно точніше визначає причину. Ось вона: компілятор не знає, що таке vectoro. Причина: ми забули підключити файл із заголовками бібліотеки STL Це легко виправити, вставивши в потрібне місце рядки: //====== Підключає частину визначень STL #include <vector> //====== Задає зону видимості імен STL using namespace std; Тепер треба
вирішити, куди вставити ці рядки. Їх можна вставити в початок файлу MyDoc.h,
по це буде марнотратне. Річ у тому, що для підключення файлів заголовків
різних бібліотек існує спеціальне місце - файл Stdafx.h. Цей файл
(спільно з файлом StdAfx.cpp) використовується для побудови файлу скомпільованих
заголовків My.pch (precompiled header) і файлу скомпільованих типів StdAfx.obj. Вони розташовані в теці Debug вашого проекту і служать для прискорення повторних компіляцій файлів проекту після внесених вами змін, якщо вони незначні. Таким чином, файли бібліотек, що підключаються, а вони значні по розмірах і компілюються лише при необхідності. Зараз настала така необхідність, оскільки виправлення зачіпають файл Stdafx.h. Вставте два вищезгадані рядки в кінець файлу Stdafx.h і запустите музику (Ctrl+F5). Відзначте, що всі файли проекту компілюються заново, оскільки всі файли типа .срр мають як першої рядок: #include "stdafx.h" Ми змінили stdafx.h, і компілятор заново проходит по всіх залежних (dependent) від нього файлах. Після побудови і запуску зображення зірки повинне з'явитися в клієнтської області дочернего вікна-рамки, тобто у вікні, керованому класом CMyView.
Мал. 1.7. Вікно додатка My Звернете увагу на характер заливки внутрішніх частин полігону, який прийнятий за умовчанням. Він ідентифікується символьною константою ALTERNATING, але є ще один варіант заливки - WINDING. Вставте у функцію OnDraw, перед виведенням полігону, рядок. pDC->SetPolyFillMode(WINDING); і натискуйте Ctrl+F5. Характер заливки змінився. Пояснення цього факту (і багато інших) треба навчитися шукати в документації, супроводжуючою Studio.Net. Дайте команду Help > Index, у вікно Look for введіть SetPolyFillMode і натискуйте Enter. З'явиться вікно Index Results for..., у якому слід зробити вибір між API-функцией SetPolyFillMode і однойменним методом класу CDC. Оскільки ми працюємо з бібліотекою MFC, то вибір майже завжди падає на методи класів, а не на однойменні функції API. Текст довідки з'явиться у вікні Web Browser (забагато вікон), і якщо ви дійсно хочете зрозуміти алгоритм закрашення гроном внутрішніх частин полігону, то вам доведеться трохи попрацювати, навіть маючи хороший англійський. До таких ситуацій теж треба виробити правильне відношення. Програміст має бути копіткий і терплячий. Підведемо підсумок:
рекламодавці: Изысканный интерестный навигатор asus мы знаем как сделать так чтобы Вы не потерялись., Изысканный надежный навигатор e-ten все нормы и стандарты соблюдены./ восстановительный ремонт сотовых телефонов ремонт vertu ascent ti Очень быстро|ремонт фотоаппаратов casio ремонт фотоаппаратов в москве естественныйLF KS Металлопрокат: труба медная, аноды цинковые Краснодар опт. |
|
|||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||