2013-04-18 94 views
1

我有一個對象指針向量。將對象指針向量傳遞給一個類(C++)

std::vector<myObject *> listofObjects; 

我想將它們傳遞給需要它們訪問的另一個對象。

當我嘗試做一些這樣的:

class NeedsObjects 
{ 
public: 
    NeedsObjects(std::vector<myObject *> &listofObjects) 
private: 
    std::vector<myObject *> &listofObjects; 
}; 

然後初始化初始化列表中,我得到了以下錯誤向量:

'myObject' was not declared in this scope 
template argument 1 is invalid 
template argument 2 is invalid 

我在做什麼錯?我想要做的就是將一個向量傳遞給NeedsObjects類。

+0

您需要聲明' 'NeedsObjects'之前的myObject'。 – juanchopanza 2013-04-18 06:44:27

回答

4

您使用指針到該對象,這樣你就不必定義完整的對象結構,在使用它之前只是簡單的聲明它在該文件中:

class myObject; // pre declaration, no need to know the size of the class 
class NeedsObjects 
{ 
public: 
    NeedsObjects(std::vector<myObject *> &listofObjects) 
private: 
    std::vector<myObject *> &listofObjects; 
}; 
+0

@WernerHenze它是一個指針的容器。這裏肯定是不完整的類型。 – juanchopanza 2013-04-18 08:01:23

+0

@juanchopanza你說得對,對不起。我會刪除我的評論。不幸的是,SO不允許我撤回我的downvote :( – 2013-04-18 08:52:01

+0

@WernerHenze的權利,你必須等到OP進行編輯,那麼你可以刪除它:) – juanchopanza 2013-04-18 08:55:41

3

你不告訴編譯器什麼myObject是,所以它不知道如何創建std::vector。在此翻譯單元中使用.h文件添加參考或定義myObject

要麼

#include "myObject.h" 

class NeedsObjects 
{ 
public: 
    NeedsObjects(std::vector<myObject *> &listofObjects) 
private: 
    std::vector<myObject *> &listofObjects; 
}; 

如果你在一個單獨的頭文件中定義myObject

class myObject { 
//declaration goes here 
}; 

class NeedsObjects 
{ 
public: 
    NeedsObjects(std::vector<myObject *> &listofObjects) 
private: 
    std::vector<myObject *> &listofObjects; 
}; 
3

當我看到你沒有在可見myOpbject類型的任何聲明,您的碼。

你已經基本上2種選擇:

一)包括標題,充分聲明myObject的。

#include "myObject.h" // ... or something near to this. 

b)讓我們認爲myObject是類。你在這裏提供的代碼(至少是聲明部分)實際上並不需要知道myObject的大小,所以你可以聲明myObject是類,它是在其他地方聲明的。

class myObject; 
+0

添加頭文件不起作用,但部分聲明奏效! – raf 2013-04-18 10:16:56

+0

你在哪個頭文件中聲明瞭myObject類? – 2013-04-18 10:32:04

相關問題