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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2011, 12:51   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию Перегрузка операторов

Написал такой вот код
Код:
#include "stdafx.h"
#include "iostream"
#include "math.h"

using namespace System;

class coord{
public:
	coord();
	coord(int,int);
	~coord();
	int Q();
	int W();
	float dlina();
	friend coord operator-( coord&,int);
	friend coord operator-( coord&, coord&);
	friend coord operator+( coord&, coord&);
	friend coord operator+( coord&,int);
	coord& operator=(const coord&);
	bool operator==(  coord&);
	bool operator!=(  coord&);
	bool operator>(  coord&);
	bool operator<(  coord&);

private:
	int q,w;
};
coord::coord(int a,int b){
	q=a;
	w=b;
}

int coord::Q(){
		return q;
	}
int coord::W(){
		return w;
	}
float coord::dlina(){
	return sqrt((float)(q*w));
}
coord operator-( coord& i, coord& j){
		 return  coord(i.Q()-j.Q(),i.W()-j.W());
	}
coord operator+( coord& i, coord& j){
		return coord(i.Q()+j.Q(),i.W()+j.W());
	}
coord operator-( coord& i,int j){
	return coord(i.Q()-j,i.W()-j);
};
coord operator+( coord& i,int j){
	return coord(i.Q()+j,i.W()+j);
};
bool coord::operator==( coord& b){
	if(q==b.q&&w==b.w) return 1;
	else return 0;
}
bool coord::operator!=( coord& b){
	if(q==b.q&&w==b.w) return 0;
	else return 1;
}
bool coord::operator>(  coord& b){
	if(dlina()>b.dlina()) return 1;
	else return 0;
}
bool coord::operator<( coord& b){
	if(dlina()<b.dlina()) return 1;
	else return 0;
}
/*(coord& coord::operator=(const coord& a){
	coord *t=new coord();
	t->q=a.q;
	t->w=a.w;
	return t;
}*/
int main()
{
    
    return 0;
}
И пытаюсь запустить, компилятор ругается
Код:
1>------ Build started: Project: laba3, Configuration: Debug Win32 ------
1>laba3.obj : error LNK2028: unresolved token (0A000324) "public: __thiscall coord::~coord(void)" (??1coord@@$$FQAE@XZ) referenced in function "class coord __cdecl operator-(class coord &,class coord &)" (??G@$$FYA?AVcoord@@AAV0@0@Z)
1>laba3.obj : error LNK2019: unresolved external symbol "public: __thiscall coord::~coord(void)" (??1coord@@$$FQAE@XZ) referenced in function "class coord __cdecl operator-(class coord &,class coord &)" (??G@$$FYA?AVcoord@@AAV0@0@Z)
1>C:\Users\Пользователь\documents\visual studio 2010\Projects\laba3\Debug\laba3.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
В чем может быть дело ?
И еще вот перегрузка оператора = .. если раскомментировать дает
Код:
error C2440: 'return' : cannot convert from 'coord *' to 'coord &'
Как сделать чтобы оператор возвращал адрес объекта а не указатель на него ?
Jugger вне форума Ответить с цитированием
Старый 22.11.2011, 15:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Как сделать чтобы оператор возвращал адрес объекта а не указатель на него ?
Он возвращает не адрес, а ссылку... Никак, такой протатип у оператора.

Цитата:
компилятор ругается
Деструктор в классе описан, а реализации нет.
p51x вне форума Ответить с цитированием
Старый 22.11.2011, 16:11   #3
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

У вас не определен ни конструктор по умолчанию, ни деструктор. К тому же не понятно, что это за пространство имен System, которое вы включаете в свою программу?!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 22.11.2011, 17:13   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
К тому же не понятно, что это за пространство имен System
Это из .NET, человек просто не отличает c++ и c++ cli... или учится по такой книжке. )
p51x вне форума Ответить с цитированием
Старый 22.11.2011, 22:01   #5
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Спасибо за ответы

namespace System по дефолту вставляется при создании консольного приложения в Visual C++ .. я его не успел поменять на std, но вряд ли тут это играет роль
Jugger вне форума Ответить с цитированием
Старый 23.11.2011, 11:30   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
namespace System по дефолту вставляется при создании консольного приложения в Visual C++
Врете. Она вставляется только в .NET проекты, в С++ НЕ вставляется.
p51x вне форума Ответить с цитированием
Старый 23.11.2011, 23:10   #7
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Вру

Сам только что заметил что выбрано CLR вместо Win32
Ну для такого рода програмок видимо не важно что выбирать
Jugger вне форума Ответить с цитированием
Старый 23.11.2011, 23:40   #8
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Еще один вопрос по этому же коду появился
перегрузку = поправил
Код:
coord& coord::operator=(coord& a){
	
	q=a.q;
	w=a.w;
	return *this;
}
в мэйне попытался использовать

Код:
int main()
{
    coord e(8,9999);
	coord i(7,11);
	coord y();
	y=e+i;
	cout << y.Q()<<y.W();
    return 0;
}
и получил

Код:
error C2659: '=' : function as left operand
то есть как будто y должен был быть справа от =
что не так реализовано ?
Jugger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ перегрузка операторов pavel282 Помощь студентам 6 11.09.2010 20:35
Перегрузка операторов(С++) Сергей AfeR Помощь студентам 0 16.06.2010 18:34
Перегрузка операторов raspberry Общие вопросы C/C++ 2 06.04.2010 00:19
Перегрузка операторов. Macb3th Общие вопросы C/C++ 5 01.04.2010 21:14
Перегрузка операторов, Организация перегрузки операторов chagin_yav Помощь студентам 2 12.05.2008 09:15