错误C2228:'.draw'的左边必须有class / struct / union

时间:2011-08-26 09:33:44

标签: c++ vector polymorphism

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

drawable.at(i).draw();

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

vector<render*> drawable;

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

顺便说一句,把孩子放进去我用过这个: 头:

ShaysWorld * sw;

CPP:

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

我该怎么做才能解决'.draw'问题的左边?

3 个答案:

答案 0 :(得分:6)

drawable.at(i)->draw();因为drawable.at(i)是渲染指针

答案 1 :(得分:1)

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.

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

答案 2 :(得分:1)

  

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

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

  

它是渲染指针的向量

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

这就是错误信息所说的:“左边的'.draw'必须有class / struct / union”。这意味着它所说的内容:.draw左侧的内容是drawable.at(i),该表达式的类型不是类,结构或联合 - 它是指向类的指针