【问题标题】:error C2228: left of '.draw' must have class/struct/union错误 C2228:'.draw' 的左侧必须有类/结构/联合
【发布时间】:2011-08-26 17:42:49
【问题描述】:

好的,我认为问题在于我没有初始化向量 但我不知道......无论如何,我收到一个错误,说这是错误的:

drawable.at(i).draw();

在头文件中将向量声明为:

vector<render*> drawable;

它是一个渲染指针向量,因为我有一大堆需要绘制的类,它们都是具有纯虚函数的父级的子级,这是错误的方式吗?

顺便说一句,为了把孩子放进去,我用了这个: 标题:

ShaysWorld * sw;

cpp:

sw = new ShaysWorld;
drawable.push_back(sw);

如何解决“.draw”的左侧问题?

【问题讨论】:

    标签: c++ vector polymorphism


    【解决方案1】:

    drawable.at(i)-&gt;draw(); 因为 drawable.at(i) 是一个渲染 pointer

    【讨论】:

      【解决方案2】:

      Try Out LLVM:

      _484_0.cc:8:20: error: member reference type 'Renderer *' is a pointer;
                             maybe you meant to use '->'?
          renderers.at(i).draw();
          ~~~~~~~~~~~~~~~^
                         ->
      1 error generated.
      

      或者使用出色的编译器如何改善用户体验。

      【讨论】:

        【解决方案3】:

        我认为问题在于我没有初始化向量

        没有。您应该能够立即发现这不是问题,因为您从编译器中得到了错误。无法初始化事物会导致程序运行时出现问题。您还没有运行它,因为它还没有编译,因为您收到了编译器错误消息。

        它是一个渲染指针向量

        是的,是的。所以当你从那个向量中得到一个元素时,你就有了一个指针。您不能在指针上调用成员函数,因为指针不是对象 - 它指向对象。

        这就是错误消息的含义:“'.draw' 的左侧必须有类/结构/联合”。这正是它所说的:.draw 左边的东西是drawable.at(i),并且该表达式的类型不是类、结构或联合——它是一个指向类的指针。

        【讨论】:

        • 吹毛求疵,但从技术上讲,指针可以是一个对象,在这种情况下它就是。更准确地说,您不能在指针上调用成员函数,因为指针类型没有成员。
        猜你喜欢
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-03
        • 1970-01-01
        相关资源
        最近更新 更多