C++ c+中的嵌套类+;

C++ c+中的嵌套类+;,c++,class,nested,C++,Class,Nested,在A类中,如果我使用std::vector,那么一切都正常工作。但是当我使用嵌套类时,它不起作用。你真的应该在MyVec中显示代码。首先,可能MyVec的运算符[]没有返回引用,因此当您执行b[0]时,推回是在更改一个副本,而不是您想要的;如果只使用b.pushback()进行测试,就不会出现这个问题。您真的应该在MyVec中显示代码。首先,可能MyVec的运算符[]没有返回引用,因此当您执行b[0]时,推回是在更改一个副本,而不是您想要的;如果您只是使用b.pushback()进行测试,您就不

在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