簡體   English   中英

通過指針向量的指針...不,不?

[英]Passing Pointer of vector of pointers… no no?

C ++的新手,它給我帶來了嘶啞的感覺。

實際的代碼在另一台計算機上,我無法復制它,因此,我將盡最大努力使用偽代碼。

我的最終結果是要有一個[指針]向量,可以由幾個不同的對象訪問。 我嘗試解決此問題的方法是使包含向量的原始類具有類似於以下內容的方法:

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

因此,我的各個類最終都有一行這樣的代碼:

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

然后我要開始將對象扔進向量中。 所以首先我實例化一個對象:

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

然后我想將其放入向量中,所以我這樣做了:

myStuff->push_back(tempObject);

這樣編譯就可以了,但是當我運行它時會窒息。 通過調試器,我得到:

[some_] allocator :: construct中的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。

這僅僅是一個簡單的語法問題,還是因為指向指針向量的指針只是一個不,所以我很生氣嗎?

我一直在嘗試查看如何傳遞向量,盡管我看到的大多數事情都顯示了調用一個接收&vector並對函數中的向量進行填充的函數,但我看不出有什么不同而是調用一個函數,該函數返回引用,然后對該向量進行填充。 就我而言,這僅僅是一個巨大的邏輯缺陷嗎?

有什么線索可以快速將程序修復為正確的程序嗎?


我將嘗試建議的事情。 你們都提供了極大的幫助。 非常感謝!

在上面的代碼中,vectorPointer從未分配/分配。

通常,返回引用比指針好,因為它們不能為null。

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

ClassA{
public:
    classA();

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


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

我認為您想使vectorPointer成為一個向量,而不是一個指向向量的指針。 當您返回指針時,實際上是在將指針返回到指針。

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

在代碼中,盡管您返回的是指向矢量的指針的地址,而不是指向矢量的指針的地址。

可以將C ++容器庫(或STL,包括vector )視為已存在,以保護您免受指針錯誤和重新實現數據結構的困擾。 因此,盡管您編寫的是合法的C ++(無論如何都可以編譯),但看來您犯了某種指針錯誤。

我建議盡可能使用普通對象和引用替換指針,以簡化代碼並讓C ++為您完成工作,同時(或作為一種方式)嘗試查找指針錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM