Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка с перегрузкой 
:(
    Опции темы
knut
Дата 14.11.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Добрый день.
Есть простая перегрузка + .Но вот ошибки какие то непонятные.
Где дырка?
Цитата

error LNK2019: unresolved external symbol "public: __thiscall COverload::~COverload(void)" (??1COverload@@QAE@XZ) referenced in function "class COverload & __cdecl operator+(class COverload const &,class COverload const &)" (??H@YAAAVCOverload@@ABV0@0@Z)

Код

class Overload
{
///
...
friend COverload operator+(const COverload &,const COverload &);
...
};

COverload operator+(const COverload &m_ob,const COverload &m_ob1)
{
    COverload m_overload;
    m_overload.m_member = m_ob1.m_member + m_ob1.m_member;
    return m_overload;
}





--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
chaos
Дата 14.11.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



лажа какая то с конструктором по умолчанию

Добавлено @ 14:38 
не ! гоню

Добавлено @ 14:39 
покажи уж весь класс 
PM WWW   Вверх
knut
Дата 14.11.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Код

class COverload
{
public:
      int m_member;
      int m_member1;
public:
    COverload();
    COverload(int m_member,int m_member1):m_member(20),m_member1(10){}
    ~COverload(){}
    
     COverload operator-(const COverload &);
     COverload operator+(const COverload &);
};
COverload COverload::operator +(const COverload &m_ob)
{
    COverload m_overload;
    m_overload.m_member = m_ob.m_member + m_ob.m_member1;
    return m_overload;
}


только не надо говорить у меня все компилитсяsmile



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Fazil6
Дата 14.11.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

только не надо говорить у меня все компилится

так ведь компилится.  smile даже у тебя.
не видно в коде где реализация конструктора поумолчанию, которым создается локальный объект  в COverload::operator +
А в остальном, должно собираться

Это сообщение отредактировал(а) Fazil6 - 14.11.2006, 15:21
PM MAIL   Вверх
Partizan
Дата 14.11.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



гммм....а линкер разве не на деструктор ругается?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Kuvaldis
Дата 14.11.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



knut, 
1. в конструкторе ты, как я понял, хотел сделать значения по умолчанию 20, 10
Ошибка в том, что у тебя имена формальных параметров совпадают с полями класса
Причем инициализация по умолчанию делается так, как я показал ниже в коде

2. По правилу хорошего тона, если ты переопределяешь хотя бы один из конструкторов, то нужно ЯВНО описать и все остальные конструкторы и деструктор. При возвращении значения из перегруженной функции operator + работает конструктор копий (которого у тебя нет) Первоначально я думал, что ошибка именно  в этом. 
Но оказалось, что это было не критично, а критичен был пункт 1.
Делать нужно так
Код

class COverload    
{    
    public:    
        int  m_member;    
        int  m_member1;    
    
    public:        
        COverload(int member = 20, int member1 = 10) : m_member(member), m_member1(member1) {}
        COverload(const COverload &) {}
        ~COverload(){}    
     
        COverload operator - (const COverload &);    
        COverload operator + (const COverload &);    
};    

COverload COverload::operator + (const COverload& m_ob)    
{    
    COverload m_overload;    
    m_overload.m_member = m_ob.m_member + m_ob.m_member1;    
    return m_overload;    
}


Это сообщение отредактировал(а) Kuvaldis - 14.11.2006, 19:21


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
knut
Дата 15.11.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Давайте друзя пасширем темуsmile
Вот есть класс
Код

class Overload
{
public:
   OverLoad(){};
   Overload(const Overload&){};
   ~Overload(){};
---------------------------------------------

      COverload operator+(const COverload  &);
      COverload operator=(const COverload  &);
      COverload &operator[](const int );
      friend ostream &operator<<(ostream&, COverload &);
       ostream &operator>>(ostream&, COverload &);

      
public:
        vector<int>v_vector;
        
};
COverload COverload::operator +(const COverload &m_ob)
{
    COverload m_overload;
    m_overload.m_member = m_ob.m_member + m_ob.m_member1;
    return m_overload;
}
 
 ostream &operator <<(ostream &os,const COverload &m_ob)
{
    os<<m_ob.m_member;
    return os;
    
}
istream &operator>>(istream &os, COverload &m_ob)
 {
     char buffer;
     os>>buffer;
     m_ob.m_cin = buffer;
     std::cout<<"echo"<<m_ob.m_cin;
     return os;
 }

вот как для контейнера перегрузить оператор []?



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
JackYF
Дата 15.11.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Код

КАКОЙ_ХОЧЕШЬ_ТИП operator[]( int ) [ const ]


В классе... Вот тебе я вся перегрузка.
Место int в списке параметров тоже можешь любой тип написать.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
knut
Дата 15.11.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



JackYF, 
в смысле так
Код

int operator [](const int i)
{
  COverload m_overload;
  if(i<0) return std::cout<<"Error" 
  return m_overload.v_vector[i];

}





--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
JackYF
Дата 15.11.2006, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Ну ради бога...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
knut
Дата 15.11.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Цитата

Ну ради бога... 

в смысле...


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
JackYF
Дата 15.11.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Ну в плане можно и так...
Я же конкретную реализацию не писал.
Или это был не вопрос, а мысли вслух - 3 постами выше?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
knut
Дата 15.11.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



но вот проблемма одна возникает с преоброзованием типов. при return e.
Код

return m_overload.v_vector[i]. 

i инт а функция возврошает COverload. менаю COverload на инт тоже не помогает. 




--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
JackYF
Дата 15.11.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Стоп! А зачем ты объявляешь m_overload в функции? Что оно тебе возвратит-то?

Добавлено @ 18:50 
В объявлении и в реализации у тебя сигнатуры одинаковые?

Добавлено @ 18:50 
Короче, кидай полный код сейчас, который есть, будем править.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
knut
Дата 15.11.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Цитата

В объявлении и в реализации у тебя сигнатуры одинаковые? 

ну да.
Цитата

Стоп! А зачем ты объявляешь m_overload в функции? Что оно тебе возвратит-то?

и тй элемент вектора.


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0601 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.