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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание нового объекта когда неизвестен тип, binary '=' : no operator found which ... 
:(
    Опции темы
Royan
Дата 26.11.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

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



Всем привет,

Напомните, пожалуйста, что я делаю не так вот куски моего кода:

Код

//CObj.h
class CObj {

public:
    CObj();
    virtual ~CObj();

    void operator= (const CObj& _Right) {
        if (this != &_Right) {
           //copy here
        }
        return *this;
    }

    /* Есть еще такой вариант */
    //CObj&  CObj::operator =(const CObj& _Right) {
    //    if (this != &_Right) {
    //        
    //    }
    //    return *this;
    //}
};


Код

//CLayer.h
template <typename _Ty>
class CLayer {

public:
        CLayer(unsigned int neuronsNum)
        : objArr(NULL)
        {           
            for(unsigned int i = 0; i < neuronsNum; i++) {
                objArr[i] = new _Ty();                
            }
        };
    
    ~CLayer() {
        delete [] objArr;
    };

    private:  
    _Ty *objArr;
};


Код

//Какой-то cpp

CLayer<CObj> layer = CLayer<CObj>(2);


Получаю вот такую ошибку:

Цитата
d:\...\CLayer.h(30) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'CObj *' (or there is no acceptable conversion)
        d:\...\CLayer.h(26) : while compiling class-template member function 'CLayer<_Ty>::CLayer(unsigned int)'
        with
        [
            _Ty=CObj
        ]
        d:\...\main.cpp(25) : see reference to class template instantiation 'CLayer<_Ty>' being compiled
        with
        [
            _Ty=CObj
        ]


Это сообщение отредактировал(а) Royan - 26.11.2005, 17:19


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Void
Дата 26.11.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Royan
Оператор присваивания не наследуется. Определи его в CLayer снова.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Guest
Дата 26.11.2005, 18:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не понимаю, как такая строчка вообще компилируется:

Код

 objArr[i] = new _Ty();


Насколько я понимаю, _Ty - это СObj, значит objArr либо просто указатель на _Ty, либо указатель на массив объектов _Ty. Значит objArr[i] либо вообще некорректно, либо возвращает ссылку на i-ый объект _Ty, но new _Ty() возвращает _Ty*, так что в случае _Ty* objArr присваивание некорректно. Нужно сделать _Ty** objArr, либо

Код

_Ty object;
objArr[i]=object;


И все равно не понятно, где в коде создаются neuronsNum объектов _Ty
  Вверх
Royan
Дата 26.11.2005, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

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



Void, на самом деле эти два класса независимы.

Guest, кем бы ты ни был ты оказался прав. Действительно я значально не понял "что" я получаю оператором new. Спасибо!


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Void
Дата 26.11.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Royan
Извиняюсь, читал по диагонали.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
LPBOY
Дата 26.11.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Void @ 26.11.2005, 17:23)
Оператор присваивания не наследуется.

Почему не наследуется?
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Void
Дата 26.11.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



LPBOY
Если быть точным в формулировках, то он всегда скрывается оператором присваивания класса-наследника, явным или неявным. (13.5.3/1)


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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