2017-01-13 7 views
0

ベクトルのセルからオブジェクトを取り出し、それを変更する関数を作りたいと思います。まず、関数に参照することでこのセルを渡す必要があり、できません。ベクトルのセルをC++の関数に渡すには?

void circleChoiceOne(Circle& object); 
vector<Shape*> shapeArr; 
int main() 
{ 
    circleChoiceOne(shapeArr[choice]); 
    return 0; 
    system("PAUSE"); 
} 

私が手にエラーがライン7を指摘され、それは言う: タイプCircle &の参照がタイプShape *の値で初期化することができません。

答えて

1

リファレンスをポインタで初期化することはできません(もちろん、ポインタへの参照でない限り)。関数シグニチャーをポインターを受け入れるように変更するか、逆参照されたオブジェクトで関数を呼び出すか、std::refをコンテナーに保管してください。これは、ShapeCircleの子孫であることを前提としています(これは少しばかりです)。

例:

void circleChoiceOne(Circle* object); 

それとも

circleChoiceOne(*shapeArr[choice]); 

それとも

vector<std::ref<Shape>> shapeArr; 
+0

、それは言いません:形状「からの、適切な変換機能を 『サークル*『は –

3

shapeArr[choice]Shape*を返しますが、この方法は、Circle&を期待しています。

私はCircleShapeのサブクラスであると仮定しています。

あなたはで参照を渡すことができますので、あなたは値へのポインタを間接参照するとよいでしょう、Circle*からShape*をダウンキャストするdynamic_castが必要になります。

あなたはShape*が実際にキャストする前に(RectangleまたはTorusではなく)Circleを指していることを確認し、そうでない場合を処理する必要があります。それは動作しません

+0

存在し、私は、ダイナミックキャストをしようとしています: 『』する』shapeArr [選択] = dynamic_castを(*サークル);』 しかし、 –

+0

@ YazenVidあなたの質問と私の答えは、あなたの 'vector'から要素へのアクセスに関心があり、それに割り当てられていません。また、あなたのコメントのコードは' Circle 'は型であり、変数ではありません。 – Dai

関連する問題