2014-02-25 249 views
0

我在這裏做錯了什麼? 我需要做第二個構造函數接受一個值的結構。將結構傳遞給構造函數

note.h

class Traymenu; 

class Note : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit Note(Traymenu *trayMenuIn, QWidget *parent = 0); //Working 
    explicit Note(Traymenu *trayMenuIn, struct prop bla, QWidget *parent = 0); //ERROR forward declaration of "struct prop" 

note.h(可選擇性)

class Traymenu; 
struct prop;   //ERROR: forward declaration of "struct prop" 

class Note : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit Note(Traymenu *trayMenuIn, QWidget *parent = 0); 
    explicit Note(Traymenu *trayMenuIn, struct prop bla, QWidget *parent = 0); //ERROR forward declaration of "struct prop" 

note.cpp

#include "note.h"  
Note::Note(Traymenu *trayMenuIn, struct prop bla, QWidget *parent) : //ERROR: bla has incomplete type 

回答

1

您正在接受由值的結構中,要求其完整定義在該點可用(它需要是complete type)。通過參考以避免此:

Note(Traymenu*, const prop& bla); // reference to const is almost 
            // equivalent to pass by value 

如果真的需要複製,請包括prop的定義。

如果您對需要完成的類型進行任何操作,您仍然需要在實現文件中包含prop的定義。

在變量聲明中省略了struct關鍵字,它在C++中不是必需的,我會認爲它是不好的樣式。

+0

'struct'關鍵字可以用來轉發聲明 – Paranaix

+0

@Paranaix是的,這是必要的,但不是在接受參數時。 – pmr

+0

我在另一個調用'Note'構造函數的類中聲明瞭我的'struct prop'作爲公共成員變量。嗯。它不能被引用,因爲在調用構造函數 – user2366975