2014-02-13 2 views
-3

Я вызываю конструктор класса Примечание с параметром this класса Traymenu. Я хочу, чтобы каждый объект класса Note знал о существующем объекте класса Traymenu (существует только один раз, но много объектов класса Note).указатель как формальный параметр в C++

void Traymenu::newNote(){ 
    Note(&this); 


Note::Note(Traymenu * mn) : 
    QWidget() 
{ 
    ui.setupUi(this); 
    this->show(); 
    myMn = new Note(*mn); 
} 

myMn является частным членом указатель класса примечание: Traymenu * myMn;

Ошибка

no matching function for call to 'Note::Note(Traymenu&)' 
myMn = new Note(*mn); 
        ^
+1

Неужели вы не получите бесконечную рекурсию, когда вы это исправите? – juanchopanza

+0

Затем я получаю ошибку 'can not convert 'Note *' to 'Traymenu *' в присваивании myMn = new Note (mn);'. Я сделал это так, как аналог этого источника: http://www.daniweb.com/software-development/cpp/threads/407841/pointers-inside-constructor – user2366975

+0

@ legends2k Существует конструктор 'Примечание (Traymenu *)', который вызывает 'Примечание (TrayMenu *)'. Интересно, что такое условие остановки. – juanchopanza

ответ

0

Я подозреваю, что вам нужно изменить последнюю строку в вашем примере, чтобы:

myMn = mn; 

Первая функция члена, которую вы опубликовали, не имеет смысла. Что вы пытаетесь достичь с этим?

EDIT: Принимая во внимание ваши комментарии, которые вы, вероятно, хотите что-то вроде:

class Note; 

class Traymenu { 
    std::vector<Note *> notes; 

public: 
    void newNote() { 
    notes.push_back(new Note(this)); 
    } 
}; 

class Note { 
    Traymenu * tm; 

public: 
    Note(Traymenu * t) : tm(t) {} 
}; 

Обратите внимание, что я не пытался скомпилировать мой пример.

+0

Это получает ошибку 'lvalue требуется как унарный '&' операнд Примечание (&this);' и ''Traymenu' не называет a тип Traymenu * myMn; ' – user2366975

+0

Я хочу, чтобы каждый объект класса' Note' знал о существовании одного единственного объекта класса 'Traymenu' – user2366975

+0

Ваша первая функция не является полной и не имеет никакого смысла. ошибка, которую вы видите, должна исчезнуть, если вы измените 'Примечание (&this);' в 'Примечание (это);'. Однако создаваемый вами объект 'Примечание' будет уничтожен, когда ваш' newNote() 'завершается. –

1

Проблема в том, что в myMn = new Note(*mn); вы используете *mn, какие разыскивания mn. Тип превращается в Traymenu& вместо Traymenu*. Используйте myMn = new Note(mn);. Как отмечают люди, это будет бесконечная рекурсия, так что удачи в этом.

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