2013-09-18 5 views
0

У меня есть этот кусок кода:C++ Ссылка на объект

Wmmbid02 wmmbid02; 
wmmbid02.Omplir(this); 
return wmmbid02; 

и Wmmbid02.h:

class Wmmbid02: public Idoc { 

public: 
    Wmmbid02(); 
    //void EscriureFitxer(); 
    void Omplir(Edi); 

private: 
    Segment crearSegment(string a[], string b[]); 
    Info crearInfo(string); 
    //virtual void LlegirFormat(string); 
}; 

Visual Studio, возвращается и ошибок, потому что не может преобразовать 'Edi * сопзЬ' до ' Эди.

Каков правильный ответ ???

Благодаря

+3

Передача 'Edi' вместо' Edi * '... –

+1

' wmmbid02.Omplir (* this) 'очистит ошибку, но, возможно, это не совсем то, что вы хотите. –

+1

'* this' вместо' this' для начала. – Lohrun

ответ

1

Ваше заявление о Omplir

void Omplir(Edi); 

говорит, что этот метод принять Edi объект.

В C++ this является указателем. Вы должны использовать его внутри класса.

Если вы хотите работать, вы должны разыменовать ему:

wmmbid02.Omplir(*this); 

Стандарт говорит о this указателя:

9.3.2 этот указатель [класс. это]

В теле нестатической (9.3) функции-члена t he keyword this - это выражение prvalue, значение которого является адресом объекта, для которого вызывается функция. Тип этого элемента в членной функции класса X есть X *. Если функция-член объявлена ​​сопзЬ, тип это сопзЬ X *, [...]

Так что в вашем случае, вы, кажется, в функции-члене класса Edi, this должен быть типа Edi*.

0

, не видя определение для this я бы сказал, что вы, вероятно, хотите, чтобы заменить void Omplir(Edi); на void Omplir(Edi* const); и адаптировать определение Omplir соответственно.

0

Либо определить параметр void Omplir(Edi) указателю:

void Omplir(Edi*); 

Или передать this в качестве ссылки:

Wmmbid02 wmmbid02; 
wmmbid02.Omplir(*this); 
return wmmbid02; 

Но это зависит от того, что вы именно хотите сделать. Обычно я предпочитаю переходить по ссылкам, когда это возможно.

Смежные вопросы