2016-04-22 75 views
-2

我是Qt Creator的新手,我試圖定義一個數據庫,它將一個向量作爲參數。我已經有了數據庫的代碼,這就是我正在做的實例化對象。Qt Creator錯誤 - 「不會命名一個類型」

public: 
    vector<CEmployee*> records; 
    CDatabase all_emps(records); 

我不斷收到錯誤「的記載是不是一個類型」雖然我不明白爲什麼,因爲我已經定義爲記錄正上方的載體。我試圖將記錄更改爲簡單的矢量,但是在我的代碼的其他地方創建了其他錯誤。如果任何人都可以指出我如何解決這個問題,我們將非常感激。提前致謝!

+0

是否使用'使用命名空間std;':

這也許會更有意義?如果你[請停止](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-in-c-considered-bad-practice)。如果你不是,那麼你忘記了'矢量'前面的'std ::' – NathanOliver

+0

包括矢量頭?並使用'std :: vector'。 – Unimportant

+0

我已經嘗試了這兩個選項,但繼續得到相同的錯誤。矢量線不是出現錯誤的地方。它出現在CDatabase all_emps(記錄)行 – lantakli

回答

0

嗯,records不是一個類型,它是一個成員變量的名稱。你大概意思是:

public: 
    // member variable declaration 
    std::vector<CEmployee*> records; 
    // method declaration, taking a vector of CEmployee* as an argument 
    CDatabase all_emps(std::vector<CEmployee*> records); 

我不知道,不過,爲什麼records是公開可見的成員,因爲它似乎是一個實現細節,以及爲什麼all_emps返回CDatabase

private: 
    /// A database used to manage the data. 
    CDatabase m_db; 
public: 
    /// Returns all employee records from the database. 
    std::vector<CEmployee*> all_employees(); 
0
  1. 請確保您有#include <vector>using std::vector的地方,或者乾脆用std::前綴。

  2. 在類定義中不能使用語法CDatabase all_emps(records);。它被視爲成員函數聲明,其中您將參數類型指定爲records(參數名稱不是必需的,返回類型爲CDatabase)。 records不是一種類型。

你有兩個選擇:

  1. 使用list initialization

    Database all_emps{records}; 
    
  2. 使用構造函數和member initializer list

    MyClass 
    { 
        vector<CEmployee*> records; 
        CDatabase all_emps; 
    
    public: 
        MyClass(/* possibly vector<CEmployee*> const& records*/) : 
        records(/* possibly records*/), 
        all_emps(records) 
        { 
        } 
    
        ... 
    }; 
    
+0

我不認爲這正是我想要做的。我需要在CDatabase上創建一個實例(這是我已經創建的另一個.h文件)。在這個.h文件的構造函數中,CDatabase接受一個向量。我不確定成員初始化程序列表適合哪裏 – lantakli