Помогите решить проблему: взял прогу из примеров для C++.NET, из-за моей среды пришлось переделать на С++/CLI. Запускаю выдает ошибки "LNK", которые сложно отследить
Код:
#include "stdafx.h"
#using<mscorlib.dll>
#using<System.Drawing.dll>
#using<System.Windows.Forms.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Collections;
//Объявление абстрактного базового класса
ref class ShapeObject abstract
{
public:
virtual void Initialize()=0;
virtual void Draw(Graphics ^poG)=0;
};
//Сохранение информации о линиях
ref class LineObject : public ShapeObject
{
public:
virtual void Initialize() override;
virtual void Draw(Graphics ^poG) override;
private:
int m_nXFrom;
int m_nYFrom;
int m_nXTo;
int m_nYTo;
};
//Инициализация объекта, представляющего линию
void LineObject::Initialize()
{
//Чтение координат х и у для начальной и конечной точек линии
Console::WriteLine(L"Координата х начальной точки:");
m_nXFrom=Convert::ToInt32(Console::ReadLine());
Console::WriteLine(L"Координата y начальной точки:");
m_nYFrom=Convert::ToInt32(Console::ReadLine());
Console::WriteLine(L"Координата х конечной точки:");
m_nXTo=Convert::ToInt32(Console::ReadLine());
Console::WriteLine(L"Координата н конечной точки:");
m_nYTo=Convert::ToInt32(Console::ReadLine());
}
//Рисование линии
void LineObject::Draw(Graphics ^poG)
{
//Создание пера для рисования
Pen ^poPen=gcnew Pen(Color::Red);
//Рисование линии
poG->DrawLine(poPen, m_nXFrom, m_nYFrom, m_nXTo, m_nYTo);
}
//Сохранение информации об окружностях
ref class CircleObject:public ShapeObject
{
public:
virtual void Initialize() override;
virtual void Draw(Graphics ^poG) override;
private:
int m_nXCenter;
int m_nYCenter;
int m_nRadius;
};
//Инициализация объекта, представляющего круг
void CircleObject::Initialize()
{
//Чтение координат центра круга и длины его радиуса
Console::WriteLine(L"Координата х центра круга");
m_nXCenter=Convert::ToInt32(Console::ReadLine());
Console::WriteLine(L"Координата y центра круга");
m_nYCenter=Convert::ToInt32(Console::ReadLine());
Console::WriteLine(L"Радиус круга");
m_nRadius=Convert::ToInt32(Console::ReadLine());
}
//Рисование круга
void CircleObject::Draw(Graphics ^poG)
{
//Создание пера для рисования
Pen ^poPen=gcnew Pen(Color::Blue);
//Рисование круга
poG->DrawEllipse(poPen, m_nXCenter-m_nRadius, m_nYCenter-m_nRadius, m_nXCenter+m_nRadius,m_nYCenter+m_nRadius);
}
//Сохранение информациии обо всех фигурах, которые должны б. нарисованы
ref class DisplayObject
{
public:
void Initialize();
void Add();
void Draw(Graphics ^poG);
DisplayObject();
private:
ArrayList ^m_paShapes;
};
//Инициализация структуры DisplayObject
void DisplayObject::Initialize()
{
m_paShapes=gcnew ArrayList();
}
//Добавление нового объекта
void DisplayObject::Add()
{
bool fFinished=false;
String ^pszMore;
ShapeObject ^poShape;
while(!fFinished)
{
//Какой объект должен быть создан?
Console::WriteLine("Type c to create a circle or l to create a line");
pszMore=Console::ReadLine();
if(pszMore->Equals(L"c"))
{
poShape=gcnew CircleObject();
}
else
{
poShape=gcnew LineObject();
}
//Инициализация созданного объекта
poShape->Initialize();
//Cохранение его в структуру
m_paShapes->Add(poShape);
//Вопрос к пользователю: хочет ли он добавить еще объект
Console::WriteLine("Нажми у, чтобы добавить линию или круг");
pszMore=Console::ReadLine();
if(!pszMore->Equals(L"y"))
{
fFinished=true;
}
}
}
//Отображение всех фигур на экране
void DisplayObject::Draw(Graphics ^poG)
{
//Просмотр всех объектов, представлющих круги и линии
IEnumerator ^poEnumerator=m_paShapes->GetEnumerator();
while(poEnumerator->MoveNext())
{
//Вызов функции Draw для объекта
static_cast<ShapeObject^>(poEnumerator->Current)->Draw(poG);
}
}
//с этой точки начинается выполнение программы
#ifdef _UNICODE
int wmain(void)
#else
int main(void)
#endif
{
//Структуры для рисования на экране графических элементов
Form ^poForm=gcnew Form();
Graphics ^poGraphics=poForm->CreateGraphics();
DisplayObject ^poDisplay=gcnew DisplayObject();
//Добавление новой фигуры
poDisplay->Add();
//Переход к левому верхнему углу экрана
poForm->SetDesktopLocation(0,0);
//Открытие окна, в котором будут отображены линии и круги
poForm->Show();
//Рисование кругов и линий
poDisplay->Draw(poGraphics);
//Освобождение памяти, выделенной для отображения объектов
delete poGraphics;
//Ожидание, пока пользователь не закроет форму
Application::Run(poForm);
}
Не хотелось бы просто так забить на всю прогу, но я уже не знаю, что делать