2017-01-18 11 views
0

こんばんは、私はトピックで質問を検索しないが、残念ながら私のためのヒント と提案作品のどれもしなかったすべてのC++エラー:コールに該当する機能、G ++コンパイラ

まず。以下に簡単なコード:要するに

random_device rd; 
mt19937 rng(rd());  
uniform_int_distribution<int> wspolrzedna(1, 19); 
uniform_int_distribution<int> kierunek(0, 3); 

class one { 
    public: 
     int x, y, direction; 
     bool collision = false; 

     one(int x, int y, int k):x(x),y(y),direction(k) { 
     }; 
     one(){}; 
     ~one() {}; 

     void check(one& a){ 
      if((a.x==x) && (a.y==y)){ 
       a.collision =true; 
       collision =true; 
      } 
     }; 
}; 

class two : public one { 
    public: 
     int x,y,k,ms; 

     two(int x, int y, int k, int m):one(x,y,k),ms(m){       
     }; 
     two(){}; 
     ~two() {}; 
}; 

int main(int argc, char *argv[]){ 

    vector<one*> tmp; 

    tmp.push_back(new two(1, 2, 0,3)); 
    for(int i=0;i<2;i++) 
     tmp.push_back(new one(wspolrzedna(rng),wspolrzedna(rng),kierunek(rng))); 

    for(int i=1;i<2;i++) 
     tmp[i]->check(tmp[0]); 

    return 0; 
} 

は、私は1つのオブジェクトのXとを比較する(TMP [0])は、他のオブジェクトのxと(TMP [1]及びTMP [2])。 (y座標についても同じです)。 コンパイラ(G ++)エラー:

g++ -std=gnu++11 stack.cpp -o stack

stack.cpp: In function 'int main(int, char**)': 
stack.cpp:56:23: error: no matching function for call to 'one::check(one*&)' 
tmp[i]->check(tmp[0]); 
       ^
stack.cpp:26:7: note: candidate: void one::check(one&) 
void check(one& a){ 
    ^<p> 
stack.cpp:26:7: note: no known conversion for argument 1 from 
'__gnu_cxx::__al 
loc_traits<std::allocator<one*> >::value_type {aka one*}' to 'one&'<p> 

私はデフォルトコンストラクタとこの問題を解決する方法現時点ではありません手掛かりを持っています。

+3

問題は何ですか?エラーメッセージを読むことができませんか? –

+3

'tmp [i] - > check(tmp [0]);' tmp [i] - > check(*(tmp [0])); ' – Rama

+0

ありがとう。 tmp [i] - >チェック(*(tmp [0]));問題を解決します。 – Krzysiek

答えて

3

あなたのベクトルがoneへのポインタ、

vector<one*> tmp; 

が含まれていますが、1への参照をとる、チェック呼び出そう:

void check(one& a) 

とコンパイラはまさにそれを説明します。

tmpにポインタを格納しないでください。またはcheckを呼び出すときに重複しないようにするか、またはcheckがポインタを受け入れるようにしてください。

関連する問題