2017-01-10 4 views
0

:マーカーは、クラスGeoObjectからinherritedされます。 GeoObjectには、ファイルPoint.hが含まれています。クラスPointに格納される情報は、int longtおよびint lat(longitude、座標点の緯度)です。

今は、仮想メソッドprintInfo(GeoObjectから継承されています)を上書きして、Markerクラスのオブジェクトに格納されている情報を印刷しようとしています。問題は、この行である: str << GeoObject::getDesc() << ": " << GeoObject::getPoint().Print() << ", " << size << ", "<< colour ;

は私がGeoObject :: getPointは、Point型のオブジェクトを返すないと結論し、私がコーディネート印刷することはできませんよ、なぜ私は理解していない。このことからerror: no matching function to call to 'Point::Print()' を取得します。

以下

は、コードの重要な部分(私はあなたにこの問題のために無関係なすべてのコードを免れる)

(Marker.cpp)

string Marker::printInfo() const { 
    ostringstream str ; // used like ostream out 
    // get the description given to the GeoObject stored in this Marker 
    str << GeoObject::getDesc() << ": " << GeoObject::getPoint().Print() << ", " << size << ", "<< colour ; 
    return str.str() ; // take stringversion of string } 

(GeoObject.h)

Point getPoint() const 
     { 
      return coordinate ; 
     } 
です

(Point.cpp)

void Print(ostream &out) 
     { 
      out << longt <<", "<<lat ; 
     } 
+0

'印刷()' 1つの引数を期待しています。 – songyuanyao

+0

上記の問題は解決しましたが、何とか何も表示されません。 GeoObjectクラスの異なるオブジェクトへのポインタ(継承クラスはMarkerとPolygon)はリスト myLayerに格納されます。 Layer :: printInfo()メソッドでGeoObject :: printInfo()メソッドが呼び出され、レイヤーのすべてのデータが印刷されます。下記のコード(**次のコメント**参照)が使用されています。出力では、Layer :: printInfo()は呼び出されていますが、情報は表示されません。どうして? **どのようにしてその情報を印刷できますか?** – Wietske

+0

void Layer :: printInfo()const { //格納されているすべてのGeoObjectに対して、書き込まれたprintInfoメソッドを使用します。 for(リスト :: const_iterator it = myLayer.begin(); it!= myLayer.end(); it ++) { cout << (*it)-> printInfo(); // printInfoは文字列を返します } } – Wietske

答えて

0

Printは、ostreamをパラメータとする。

void Print(ostream &out) 

変更この行:これに

str << GeoObject::getDesc() << ": " << GeoObject::getPoint().Print() << ", " << size << ", "<< colour ; 

str << GeoObject::getDesc() << ": "; 
GeoObject::getPoint().Print(str); 
str << ", " << size << ", "<< colour ; 
+0

ありがとうございました。これは、他のエラーを解決するためのトリックでした。 ;-) – Wietske

関連する問題