C++ c+中的嵌套类+;
在A类中,如果我使用std::vector,那么一切都正常工作。但是当我使用嵌套类时,它不起作用。你真的应该在MyVec中显示代码。首先,可能MyVec的运算符[]没有返回引用,因此当您执行b[0]时,推回是在更改一个副本,而不是您想要的;如果只使用b.pushback()进行测试,就不会出现这个问题。您真的应该在MyVec中显示代码。首先,可能MyVec的运算符[]没有返回引用,因此当您执行b[0]时,推回是在更改一个副本,而不是您想要的;如果您只是使用b.pushback()进行测试,您就不会遇到这个问题。…我已经使用了您的代码,并尽可能少地对其进行了修改,以获得可编译的内容。这似乎很有效。所以错误不在你给我们看的代码中C++ c+中的嵌套类+;,c++,class,nested,C++,Class,Nested,在A类中,如果我使用std::vector,那么一切都正常工作。但是当我使用嵌套类时,它不起作用。你真的应该在MyVec中显示代码。首先,可能MyVec的运算符[]没有返回引用,因此当您执行b[0]时,推回是在更改一个副本,而不是您想要的;如果只使用b.pushback()进行测试,就不会出现这个问题。您真的应该在MyVec中显示代码。首先,可能MyVec的运算符[]没有返回引用,因此当您执行b[0]时,推回是在更改一个副本,而不是您想要的;如果您只是使用b.pushback()进行测试,您就不
void someMethod(){
//...
b[0].a.pushback(element);
//...
}
这正是我所期望的。(一次推入B的构造函数,一次从某物推入内部对象)
您可以在此处查看结果:
我已经使用了您的代码,并对其进行了尽可能少的修改,以获得可编译的内容。这似乎很有效。所以错误不在你给我们看的代码中
void someMethod(){
//...
b[0].a.pushback(element);
//...
}
这正是我所期望的。(一次推入B的构造函数,一次从某物推入内部对象)
您可以在此处查看结果:
你能描述一下“不起作用”吗?我相信这里的大师可以直接发现这一点,但我们凡人需要编译器错误之类的;)我还假设
Class
只是一个输入错误。代码编译成功了。但是,当我不能得到被推的元素时,我什么也得不到。但是如果我使用std::vector,我可以得到推送的值。也许可以向我们展示一些MyVec
的方法?如何定义运算符[]
?pushback
是如何定义的?您的意思是您将值向后推,但无法检索它?这不能说明推送方法有错误吗;与上述示例无关的错误?我认为MyVec中的方法工作正常,因为我用b.pushback(元素)检查了它;你能描述一下“不起作用”吗?我相信这里的大师可以直接发现这一点,但我们凡人需要编译器错误之类的;)我还假设Class
只是一个输入错误。代码编译成功了。但是,当我不能得到被推的元素时,我什么也得不到。但是如果我使用std::vector,我可以得到推送的值。也许可以向我们展示一些MyVec
的方法?如何定义运算符[]
?pushback
是如何定义的?您的意思是您将值向后推,但无法检索它?这不能说明推送方法有错误吗;与上述示例无关的错误?我认为MyVec中的方法工作正常,因为我用b.pushback(元素)检查了它;
#include <iostream>
#include <string>
class A
{
public:
template<typename Obj>
class MyVec{
public:
//My pushback just stores the value away for later.
void pushback(Obj & o )
{
if( obj )
{
*obj = o;
}
else
{
obj = new Obj(o);
}
std::cout<<this<<" : Pushing object "<<&o<<std::endl;
}
//some methods...
//My operator[] just returns the stored object.
Obj& operator[](int i) { return *obj; }
Obj * obj;
MyVec() : obj( NULL ) {}
};
MyVec<A> a;
};
class B
{
public:
B()
{
A an_a;
b.pushback(an_a); //Better store one away since we access it in someMethod.
}
void someMethod()
{
//...
A element;
b[0].a.pushback(element);
//...
}
private:
A::MyVec<A> b;
};
int main()
{
//Test that it all works
B outer;
outer.someMethod();
}
0xbffffa5c : Pushing object 0xbffffa0c
0x3ec3c0 : Pushing object 0xbffffa2c