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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как исправить ошибку? почему не работает оператор = 
:(
    Опции темы
rocky7
Дата 12.2.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Почему ругается компилятор?
Код
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TMess msg;
TSignal sig;//TSignal производный класс от TMess
TDSB dsb;
for(int i=0;i<20;i++)
msg[i]=i;
 sig=dsb.Execute(msg);//---------------здесь компилятор выдает ошибку Could not find a match for 'T Signal::operator=(T Signal)
}

Ниже привожу функцию
Код
TSignal TDSB:: Execute(TMess& a)
{

    int siz = a.GetLen();
    TSignal local;
    for(int i=0;i<siz;i++)
     local[i]= a[i];
    return local ;


}


Модератор: Пользуйся кнопкой "Код"

Это сообщение отредактировал(а) bsa - 12.2.2009, 21:11
PM MAIL   Вверх
andrew_121
Дата 12.2.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



rocky7, По ходу, у Signal не перегужен operator=(T Signal).
Смотри декларацию Signal.



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
rocky7
Дата 12.2.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот так у меня описан TSignal
#ifndef tsignalH
#define tsignalH
#include "tmessage.h"

 class TSignal:virtual public TMess
{
  protected:
  int len;
  short *str;
  int CarrierFreq;
  public:
  TSignal() // стандартный конструктор
  { len=0;str=0;CarrierFreq=0; }
  TSignal(int,int);
  //TSignal(int n,const short* c,int f):TMess(n,c),CarrierFreq(f)
  //{n=0;c=0;f=0;}
  TSignal(int,const short*);
  ~TSignal()  // деструктор
  { delete[] str; }
  int& GetLen() { return len; }
  int& GetCarrierFreq() {return CarrierFreq;}
  short* GetStr() { return str; }
  TSignal& operator=(TSignal&);
  short& operator[](int);
};
PM MAIL   Вверх
Gluttton
Дата 12.2.2009, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

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



Цитата

Ниже привожу функцию


Код

TSignal TDSB:: Execute(TMess& a)
{
    int siz = a.GetLen();
    TSignal local;
    for(int i=0;i<siz;i++)
    local[i]= a[i];
    return local ;
}


Ты создаешь переменную в функции local, которая в момент вызова функции будет расположена в стеке, по окончанию работы функции стек очиститься и у тебя вместо local функция будет возвращать какую-нибудь "арба-кадабру".

to xvr, zim22
*мне стыдно*

Это сообщение отредактировал(а) Gluttton - 12.2.2009, 12:37


--------------------
Слава Україні!
PM MAIL   Вверх
zim22
Дата 12.2.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(Gluttton @  12.2.2009,  10:32 Найти цитируемый пост)
и у тебя вместо local функция будет возвращать какую-нибудь "арба-кадабру".

не согласен,что арба-кадабра будет возращена. 

Вот аналогичный код, в котором также создаётся автоматическая переменная, но значение из функции возвращается "нормальное"(копия x), а не мусор.
Код

int foo(const int &x)
{ 
   int z = x;
   return z;
}


В рез-те вызова:
Код

int res = foo(10); // res == 10;



--------------------
PM MAIL   Вверх
xvr
Дата 12.2.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Вот это
Код

class TSignal:virtual public TMess
{
  TSignal& operator=(TSignal&);
};
должно быть таким
Код

class TSignal:virtual public TMess
{
  TSignal& operator=(const TSignal&);
};
или таким
Код

class TSignal:virtual public TMess
{
  TSignal& operator=(TSignal);
};


2 Gluttton:
Цитата

Ты создаешь переменную в функции local, которая в момент вызова функции будет расположена в стеке, по окончанию работы функции стек очиститься и у тебя вместо local функция будет возвращать какую-нибудь "арба-кадабру".
не будет - у него возврат по значению, объект TSignal будет скопирован

PM MAIL   Вверх
rocky7
Дата 12.2.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 Описал таким способом : 

TSignal& operator=(const TSignal&);

Всё заработало!!!

 smile  smile  smile 


xvr, - респект!!!

Буду дальше лопатить теорию. Учусь по книге Лафоре ООП на С++.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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