2010-10-04 90 views
2

新來的C++及其給我一個hissy適合。傳遞指針向量的指針...不不?

實際的代碼是在不同的計算機上,我不能複製它,所以我會盡我所能用僞代碼。

我的結局是有一個[指針]向量,可以被幾個不同的對象訪問。我試圖去了解這個問題的方法是有一個包含矢量有一種方法類似原始類:

std::vector<myObject*>& myClass::getVectorPointer(){ 
return &vectorPointer; 
} 

所以後來我的各種班結束有這樣一行代碼:

std::vector<myObject*>* myStuff = myClassObject.getVectorPointer(); 

然後我想開始向對象中投擲對象。所以,首先我實例化一個對象:

MyObject* tempObject = new MyObject("grrr"); 

然後,我希望把它的載體,所以我這樣做:

myStuff->push_back(tempObject); 

這編譯就好了,但是當我運行它扼流圈。通過調試去我得到:在[some_]分配器

402錯誤的新的表達方式::構建

我不知道這意味着什麼。我試着在提出的解決方案中將::放在我的新面前,但這並沒有做到。

因此,審查,假裝它是這樣的,但正確的語法和邏輯:

Class A.h 
#include <vector> 
#include "myObject.h" 

ClassA{ 
public: 
    classA(); 

    inline std::vector<myObject*>* myClass::getVectorPointer(){ return &vectorPointer;} 


private: 
    std::vector<MyObject*>* vectorPointer; 
} 

#include "A.h" 


int main() { 

ClassA myClassAObject; 
std::vector<myObject*>* myStuff = myClassAObject.getVectorPointer(); 
MyObject* tempObject = new MyObject("grr"); 
myStuff->push_back(tempObject); 

} 

產量402

這只是一個簡單的語法的事,還是我上了一條小溪,因爲指向向量的指針只是一個不行?

我一直在試圖看看你是如何傳遞一個向量,而我看到的大多數事件顯示調用一個函數,該函數接收一個向量並在函數中向向量做東西,我看不到這跟調用一個返回引用的函數然後向那裏的向量做東西的方式有很大不同。這只是我的一個巨大的邏輯缺陷?

任何線索我怎麼才能修復我的程序到什麼是適當的,很快?


我會嘗試建議的事情。你們都非常有幫助。非常感謝!

+0

指向向量指針的指針是合法的C++ - 不一定是最好的設計。你的ClassA構造函數大寫正確嗎? – sje397 2010-10-04 03:13:30

+0

你可以添加'class MyObject'的聲明嗎? – 2010-10-04 03:18:52

回答

1

在上面的代碼vectorPointer永遠不會被分配/分配。

通常最好是返回引用而不是指針,因爲它們不能爲空。

Class A.h 
#include <vector> 
#include "myObject.h" 

ClassA{ 
public: 
    classA(); 

    inline std::vector<myObject*>& myClass::getVectorPointer(){ return vectorPointer;} 


private: 
    std::vector<MyObject*> vectorPointer; 
} 
+0

您可能想要重新標記您的帖子 – 2010-10-04 03:16:48

+1

固定格式爲您。有很多原因使用引用而不是指針,但不幸的是,人們會使用指針而不是引用。 – Potatoswatter 2010-10-04 03:19:45

+0

*刪除了這個,因爲它晚了,我瘋了* – Amber 2010-10-04 03:23:15

0

我想你想讓vectorPointer只是一個向量,而不是一個向量的指針。當你返回一個指針時,你實際上返回一個指向指針的指針。

0

指針向量或指向向量的指針沒有任何非法之處。

在你的代碼中,雖然你要返回一個指向vector的指針的地址,而不是指向vector的指針。

0

C++容器庫(或STL,包括vector)可以被看作是存在的,以保護您免受指針錯誤以及重新實現數據結構的苦惱。因此,雖然你寫的是合法的C++(無論如何編譯),但看起來你犯了某種指針錯誤。

我建議儘可能用普通對象和引用來替換指針,以簡化代碼並讓C++爲你做工作,同時(或作爲一種手段)試圖找到指針錯誤。

+0

我唯一擔心的是,如果你不以正確的方式傳遞它們,是不是有可能發生的事情發生在它製作多個載體的副本的地方? – Amber 2010-10-04 03:36:31

+0

@Amber:要創建副本,您需要聲明一個新的變量(非引用類型)以接收副本或按值返回。 (並且很少返回值實際上是一個副本;通常你會返回一個與返回值相同的局部變量)。無論如何,不​​要擔心在它工作之前優化程序; v)。 – Potatoswatter 2010-10-04 03:51:03

+0

首先得到它 - 只有在分析說你應該 – 2010-10-04 11:54:23