2016-05-21 7 views
-1

Ich finde keine Lösungen für diesen Fehler: ungültige Initialisierung von nicht-const Referenz des Typs 'Controller &' von einem R-Wert des Typs '< in geschweiften Klammern stehenden Initialisiererliste>'ungültige Initialisierung von nichtkonstanten Referenz des Typs von einem rvalue des Typs '<geschweifte Initialisierungsliste>'

es in dieser Funktion ist:

QTPlay::QTPlay(Controller &c,QWidget *parent) : c{ c }, QWidget{ parent } 
{ 
    this->initGUI(); 
    this->currentMovie = this->c.repo.movies; 
    this->populaterepo(); 
} 

dies ist das Objekt:

class QTPlay : public QWidget 
{ 
private: 
    Q_OBJECT 
public: 

QTPlay(Controller &c, QWidget *parent =0); 
private: 
Controller &c; 
std::vector<Movie> currentMovie; 

QListWidget* repo; 
QLineEdit* title; 
QLineEdit* genre; 
QLineEdit* year; 
QLineEdit* likes; 
QLineEdit* trailer; 
QPushButton* addButton; 
QPushButton* deleteButton; 
QPushButton* filterButton; 
QPushButton* moveOneMovieButton; 
QPushButton* playmovieButton; 
QPushButton* nextmovieButton; 

QListWidget* playList; 

void initGUI(); 
void populaterepo(); 
void populatePlaylist(); 
int getRepoListSelectedIndex(); 

int getPlayListSelectedIndex(); 

void connectSignalsAndSlots(); 

private slots: 
void listItemChanged(); 

void addMovie(); 
void deleteMovie(); 
void filterRepoMovies(); 
void moveMovieToPlaylist(); 
void playmovie(); 
void nextmovie(); 
}; 

Ich nenne es hier:

Controller c(repo, p); 
QTPlay w{c}; 

Ich bin auch mit der Linux-Version von Qt arbeiten, wenn diese relevant ist.

Diese Frage ist anders, da der Typ nicht int, sondern ein benutzerdefinierter Controller ist und das Framework Qt verwendet.

+1

Wurden Sie mit dem Internet verbunden während der Untersuchung Ihres Problems? – LogicStuff

+1

Mögliches Duplikat von [Fehler: ungültige Initialisierung der nichtkonstanten Referenz des Typs 'int &' von einem rvalue des Typs 'int'] (http://stackoverflow.com/questions/8293426/error-invalid- initialization-of-non-const-Referenz des Typs-int-from-an-rval) – LogicStuff

Antwort

-1

Ändern Sie den Namen des Arguments an den Konstruktor oder den Namen der Membervariable, so dass sie nicht gleich sind (vielleicht durch _ zu einem von ihnen angehängt wird. Es kann sein, dass, was Sie tun legal ist oder es vielleicht nicht - aber es ist eindeutig verwirrend den Compiler. (Wenn ich es in einem Code-Review sah, würde ich aufhören und überprüfen Sie den Standard, um zu sehen, ob es legal war oder nicht.)

+0

Wer ist bereit, die Down-Abstimmung zu erklären? –

+0

Ich habe nicht abgestimmt. Aber einen Konstruktorparameter mit dem gleichen Namen wie ein Feld zu haben, ist vollkommen legal (und in einigen Kreisen üblich). Wenn der Compiler dadurch verwirrt wird, ist der Compiler defekt. Die Regeln für die Namenssuche unterscheiden sich für die Mitglieder und deren Initialisierer und tun in jedem Fall das Richtige. –

+0

Ich habe es versucht, es hat nicht funktioniert. Ich kann noch nicht so IDK über den Downvote abstimmen. – Paul

Verwandte Themen