Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2012, 19:18   #1
studprog
Пользователь
 
Регистрация: 15.09.2012
Сообщений: 10
По умолчанию Проблема с прогой написанной на С++/CLI

Помогите решить проблему: взял прогу из примеров для 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);
}
Не хотелось бы просто так забить на всю прогу, но я уже не знаю, что делать
studprog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выделением памяти в глобальной области windows forms(C++\CLI) DartLenin Помощь студентам 2 24.01.2012 20:58
Проблема с компиляцией в VS8 программы,написанной на Си. Assylkhan Общие вопросы C/C++ 2 18.06.2011 06:13
проблема с прогой ilushka2306 Помощь студентам 2 13.05.2011 18:20
Проблема с отображением русского языка (Windows Forms C++ CLI) Alex TGM Помощь студентам 0 17.08.2010 11:13
Проблема с инсталяцией службы( написанной на visual studio csharp) r_maniac Общие вопросы .NET 0 10.05.2010 14:41