2011-12-06 12 views
0

として認識パラメータI、次の2つの機能を持っています。コンパイル時エラー、参照城と呼ばれるクラスの内部

:私がコンパイルしようと

vector<Location> Castle::getMoves(Location*** squares, Location* loc){ 
    int row = loc->getRow(); 
    int col = loc->getCol(); 

    vector<Location> moves; 

    //problem is here! 
    getVerticalMoves(squares, &moves, row, col); 

    return moves; 
} 

void Castle::getVerticalMoves(Location*** squares, vector<Location*> * moves, int row, int col){ 
    //need to do something here, but can't call the function! 
} 

、私はこのようになりますエラーが出ます

model/src/Castle.cpp: In member function ‘std::vector<Location> Castle::getMoves(Location***, Location*)’: 
model/src/Castle.cpp:26:44: error: no matching function for call to ‘Castle::getVerticalMoves(Location***&, std::vector<Location>*, int&, int&)’ 
model/inc/Castle.h:38:8: note: candidate is: void Castle::getVerticalMoves(Location***, std::vector<Location*>*, int, int) 
make: *** [model/obj/Castle.o] Error 1 

このエラーがなぜ表示されるのかわかりません。なぜ私は参照を渡していると言いますか?

答えて

1

Locationのベクトルが欲しいですか?または、Locationへのポインタのベクトルが欲しいですか?あなたは1つを選んでそれに固執する必要があります。

参照を表示する理由は、値が示されていると、参照が等号の左側に表示される可能性があるため、参照を受け取る関数を呼び出すことができないことを示唆するためです。できません。関数に渡された内容は、等号の左側にと表示されますので、&を省略すると、エラーメッセージの情報が少なくなります。 (おそらくあなたの間違いが修正参照が必要とされた値を渡すことでしたが示唆された。)

考えてみましょう:

int f1(int &j) { j++; return 3; } 
int f2(int j) { return j+1; } 
int q; 

f1(3); // not legal, we are passing an 'int' value and need an 'int' reference 
f2(3); // legal, passing an 'int' value function needs an 'int' value 
f1(q); // legal, we are passing an 'int&', function need an 'int&' 
f2(q); // legal, reference can be demoted to value 

をですから、左辺値(等号の左側に表示されることができる何かを渡すとき)、あなたは実際に参照を持つ関数を呼んでいます - 単なる値よりも強力です。

+0

無視していることを覚えています。意味がない場合、コンパイラがそれをそのように印刷する理由を知っていますか? –

+0

私は実際の説明を追加しました。 –

1

問題は、それが第二引数だとしてあなたCastle::getVerticalMoves方法はあなたがvector<Location>*

すなわちを渡していることを呼んでいるところのに対し、vector<Location*>*を取ることです。 Locationのベクトルを待つメソッドに、Locationのベクトルを送信しようとしています。

0

問題はstd :: vector *をstd :: vector *に渡していることです。あなたのデータ型と一貫性を保つ。ポインターのベクトルにポインターを渡す場合は、それを渡します。

関連する問題