我有以下课程。 Main
类中的for循环期间发生错误。编译器抱怨draw
函数“是非类型GLCommand”。该应用程序的想法是在同一向量中存储许多不同类型的GLCommand
和Shape
。我应该采用不同的设计方法,还是解决这个问题的简单方法?
接口:
class GLCommand
{
public:
GLCommand();
virtual ~GLCommand();
virtual void draw() = 0;
};
抽象类:
class Shape : public GLCommand
{
public:
Shape(int);
virtual ~Shape();
virtual void draw() {};
private:
double colour[];
int sides;
};
派生类:
class Polygon : public Shape
{
public:
Polygon(int sides);
virtual ~Polygon();
void draw();
private:
vector<Coordinates *> verticies;
};
主:
int main()
{
vector <GLCommand*> vec;
Polygon p(4);
vec.push_back(&p);
for (vector<GLCommand*>::iterator it = vec.begin(); it!=vec.end(); ++it)
{
*it->draw();
}
return 0;
}
答案 0 :(得分:8)
你说的没有关系;问题只是运算符优先级:
(*it)->draw();
答案 1 :(得分:1)
将括号放在正确的位置:
(*it)->draw();
或者,为避免这些问题,请在容器承载其对象的所有权时使用boost :: ptr_vector。
答案 2 :(得分:1)
正如其他人已经注意到它的优先权。
但您可以使用STL算法更轻松地实现所需的效果:
std::for_each(vec.begin(), vec.end(), std::mem_fun(&GLCommand::draw));