Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量迭代的派生和基之间的类型转换:C2664错误_C++_Vector_Type Conversion_Base_Derived Class - Fatal编程技术网

C++ 向量迭代的派生和基之间的类型转换:C2664错误

C++ 向量迭代的派生和基之间的类型转换:C2664错误,c++,vector,type-conversion,base,derived-class,C++,Vector,Type Conversion,Base,Derived Class,我有以下功能 void DrawAndShowCircle(int windowWidth, int windowHeight,int windowType,Scalar windowBGColor, VirtualCircle circle) { cv::circle(circleImage,circle.Center,circle.Radius,circle.Color,circle.Thickness,circle.LineType); } void Dr

我有以下功能

void DrawAndShowCircle(int windowWidth, int windowHeight,int windowType,Scalar windowBGColor, VirtualCircle circle)
    {
        cv::circle(circleImage,circle.Center,circle.Radius,circle.Color,circle.Thickness,circle.LineType);
    }

void DrawAndShowCircles(int windowWidth, int windowHeight,int windowType,Scalar windowBGColor, vector<VirtualObject> circles)
    {
        circleImage = Mat(windowHeight,windowWidth,windowType);
        circleImage.setTo(windowBGColor);

        for(vector<VirtualObject>::iterator it = circles.begin(); it != circles.end(); ++it)
        {
            DrawAndShowCircle(windowWidth,windowHeight,windowType,windowBGColor,*it);
        }
        imshow("circle",circleImage);
        cvWaitKey(0);       
    }

我无法使用for循环进行遍历。我不清楚铸造的类型。请告知。

通过在向量中存储
VirtualObject
实例(而不是指针),您已导致发生。这意味着向量根本不包含任何圆

当您改变这一点时,您会遇到这样一个问题:从
VirtualCircle*
VirtualObject*
的转换可以自动完成(因为任何
VirtualCircle
实例也总是一个
VirtualObject
实例),但反过来需要显式转换,因为编译器不能确保将
VirtualObject
解释为
VirtualCircle
总是安全的。你在这里需要的演员是一名演员


甚至比
dynamic\u cast
更好的是将您的设计更改为使用虚拟功能。它们完全是为这种情况而设计的。

通过在向量中存储
VirtualObject
实例(而不是指针),您已经导致了这种情况的发生。这意味着向量根本不包含任何圆

当您改变这一点时,您会遇到这样一个问题:从
VirtualCircle*
VirtualObject*
的转换可以自动完成(因为任何
VirtualCircle
实例也总是一个
VirtualObject
实例),但反过来需要显式转换,因为编译器不能确保将
VirtualObject
解释为
VirtualCircle
总是安全的。你在这里需要的演员是一名演员


甚至比
dynamic\u cast
更好的是将您的设计更改为使用虚拟功能。它们完全是为这样的情况而设计的。

使用指针,否则会得到对象切片。你是说向量的指针?向量??使用指针,否则会得到对象切片。你是说向量的指针?矢量??
 vector<VirtualObject> circles;
   circles.push_back(VirtualCircle(Point(100,50),15,2,Scalar(255,100,100),1));
   circles.push_back(VirtualCircle(Point(100,100),25,2,Scalar(100,255,100),1));
   circles.push_back(VirtualCircle(Point(100,150),35,2,Scalar(100,100,255),1));
   DrawAndShowCircles(200,200,CV_8UC3,Scalar(255,255,255),circles);