2010-10-04 92 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