Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Нужна помощь с учебным кодом для C++ .NET


Автор: penb 12.5.2009, 18:17
Здравствуйте!

Я пытался откомпилить такой код в Visual Studio 2005

Код

//Draw
//Применение связанного списка для сохранения
//координат произвольного количества точек
//и их отображение с использованием GDI +
#include "stdafx.h"
#using <mscorlib.dll>
#using <System.Windows.Forms.dll >
#using <System.dll >
#using <System.Drawing.dll>
using namespace System ;
using namespace System::Drawing ;
using namespace System::Windows::Forms ;
//Создание структуры, представляющей элемент связанного списка
class PointList
{
public:
int nX;
int nY;
PointList *poNext ;
//Получение координат новой точки
void NewPoint(PointList *poNew)
{
//Чтение координат Х и Y
Console::WriteLine(S"Введите координату X");
poNew->nX = Int32::Parse(Console::ReadLine());
Console::WriteLine(S"Введите координату Y");
poNew->nY = Int32::Parse(Console::ReadLine());
//Присвоение указателю нулевого значения
poNew->poNext = 0;
}
//Отображение точек на экране
void DrawPoint(Graphics *poGraphics, PointList *poPoint)
{
// Есть ли точки для отображения?
if (poPoint->poNext)
{
//Создание пера для рисования
Pen *poPen = Pen(Color::Red);
//Рисование линии от текущей точки к следующей
poGraphics->DrawLine(poPen, poPoint->nX, poPoint->nY, роPoint->poNext->nX, poPoint->poNext->nY);
}
}
};

...



На строке:
Pen *poPen = Pen(Color::Red);

получаю ошибку:
.\5.cpp(38) : error C3604: 'System::Drawing::Pen': can only create a managed object on the gc heap

Поясните, пожалуйста, что же мне с этим делать?smile

Ещё интересна такая вещь - многие примеры из книги компилируются только в режиме /clr:oldSyntax - с чем это связано?

Спасибо!

Автор: Remiznik 12.5.2009, 18:52
Цитата(penb @ 12.5.2009,  18:17)

На строке:
Pen *poPen = Pen(Color::Red);

я не у верен но при  содздание  обекта  через указатель нужно использовать оператор new !

тоесть так !

Код

Pen *poPen =new  Pen(Color::Red);

Автор: NightmareZ 12.5.2009, 19:04
Код

Pen^ poPen = gcnew Pen(Color::Red);

Автор: penb 13.5.2009, 15:18
Remiznik, большое сппасибо всё получилось!

Продолжаем дебагить:

Код

class PointList
{
public:
int nX;
int nY;
PointList *poNext ;
//Получение координат новой точки
};


//Отображение точек на экране
void DrawPoint(Graphics *poGraphics, PointList *poPoint)
{
// Есть ли точки для отображения?
if (poPoint->poNext)
{
//Создание пера для рисования
Pen *poPen = new Pen(Color::Red);
//Рисование линии от текущей точки к следующей
poGraphics->DrawLine(poPen, poPoint->nX, poPoint->nY, роPoint->poNext->nX, poPoint->poNext->nY);
}
}


На строку:
Код

poGraphics->DrawLine(poPen, poPoint->nX, poPoint->nY, роPoint->poNext->nX, poPoint->poNext->nY);


Ругается мол:
'роPoint' : undeclared identifier

Хотя двумя строками выше в условии poPoint ещё проходит. Как это пониимать?


Автор: math64 14.5.2009, 08:34
У тебя ро русскими буквами написано

Автор: penb 14.5.2009, 13:45
math64, ты гений, большое спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)