0

カスタムタイプのコンストラクターを作成しようとしていますが、何らかの理由で呼び出そうとしています。別のクラスのコンストラクター定義のコンストラクターであると推測しています.同じ症状に合うものは見つかりませんでした私が探しているものがわからないかもしれないので、他にも質問があります。

私が電話するとき:

LatLngBounds clusterBounds(&boundsNorthEast, &boundsSouthWest);

main.cpp では、LatLngBounds.cpp で、次の行で「'LatLng:LatLng() の呼び出しに一致する機能がありません」が 2 回スローされます。

LatLngBounds::LatLngBounds(LatLng &newSouthWest, LatLng &newNorthEast)

誰でもアイデアはありますか?

ドリュー・J・ソンネ。

IDE: Xcode 3.2 (デバッグ 10.5 をターゲット)
OS: OSX 10.6
コンパイラ: GCC 4.2
アーキテクチャ: x86_64



main.cpp:

std::vector<std::string> argVector;

... fill up my argVector with strings..

vector<double> boundsVector = explodeStringToDouble(argVector[i]);
LatLng boundsNorthEast(0, boundsVector[0], boundsVector[1]);
LatLng boundsSouthWest(0, boundsVector[2], boundsVector[3]);
LatLngBounds clusterBounds(&boundsNorthEast, &boundsSouthWest);

LatLngBounds.h

#ifndef __LATLNGBOUNDS
#define __LATLNGBOUNDS
#include "LatLng.h"
class LatLngBounds {
private:
    LatLng northEast;
    LatLng southWest;
public:
    LatLngBounds(LatLng&,LatLng&);
};
#endif

LatLngBounds.cpp

#include "LatLngBounds.h"
#include "LatLng.h"

LatLngBounds::LatLngBounds(LatLng &newSouthWest, LatLng &newNorthEast)
{
    this->southWest = newSouthWest;
    this->northEast = newNorthEast;
};

LatLng.h

#ifndef __LATLNGDEF
#define __LATLNGDEF
class LatLng {
public:
    LatLng(int,double,double);
private:
    double lat, lng;
    int id;
};
#endif

LatLng.cpp

#include "LatLng.h"
LatLng::LatLng(int newId, double newLat, double newLng)
{
    /* Grab our arguments */
    id = newId;
    lat = newLat;
    lng = newLng;
};
4

3 に答える 3

3

君の

LatLngBounds::LatLngBounds(LatLng &newSouthWest, LatLng &newNorthEast)

LatLng参照によって暗黙的に渡されるtype の引数が必要です。

呼び出しは、代わりに 2 つのポインター(タイプ)LatLngBounds clusterBounds(&boundsNorthEast, &boundsSouthWest);を渡します。LatLng*

代わりに試してください:

LatLngBounds clusterBounds(boundsNorthEast, boundsSouthWest);
于 2009-11-11T06:53:31.530 に答える
3

クラスには、LatLng オブジェクトの 2 つのインスタンスがあります。オブジェクトを構築するために、コンパイラもそれらを構築する必要があります。

class LatLngBounds {
private:
    LatLng northEast;
    LatLng southWest;

クラス LatLng にはデフォルトのコンストラクターがないため、これらのオブジェクトを構築する方法をコンパイラーに明示的に伝える必要があります。

LatLngBounds::LatLongBounds( ..constructor args.. )
    : northEast( ..args for northEast constructor call ..),
      southWest( ..args for southWest constructor call ..)
{
}
于 2009-11-11T06:54:47.737 に答える
0

引用したエラー メッセージは完全なものですか? 貼り付けたように、コンパイラが無料で提供する LatLng のデフォルトの空のコンストラクターがないことを示しています。

ただし、main.cpp の次の行は間違っているようです。

LatLngBounds clusterBounds(&boundsNorthEast, &boundsSouthWest);

LatLngBounds のコンストラクターの定義は、LatLng オブジェクトへの 2 つの非定数参照ですが、LatLng オブジェクトへの 2 つのポインターを渡しています。ポインターなしで渡すだけです。

LatLngBounds clusterBounds(boundsNorthEast, boundsSouthWest);
于 2009-11-11T06:58:41.203 に答える