0

我正在尝试为自定义类型创建一个构造函数,但由于某种原因,它试图调用,我猜是另一个类的构造函数定义中的构造函数。找不到任何符合相同症状的东西我还有其他问题,因为我可能不知道我在找什么。

当我打电话时:

LatLngBounds clusterBounds(&boundsNorthEast, &boundsSouthWest);

在 main.cpp 中,在 LatLngBounds.cpp 中,我得到“No matching funciton for call to 'LatLng:LatLng()”在线上抛出两次:

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

有人有什么想法吗?

德鲁·J·索恩。

IDE:Xcode 3.2(针对 Debug 10.5)
操作系统:OSX 10.6
编译器:GCC 4.2
Arch:x86_64



主.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;
};

拉丁文

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

拉丁文.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,通过引用隐式传递。

该调用改为LatLngBounds clusterBounds(&boundsNorthEast, &boundsSouthWest);传递两个指针(类型)。LatLng*

请尝试:

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

在您的课程中,您有两个 LatLng 对象实例。为了构造你的对象,编译器也需要构造它们。

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 个非常量引用,但您将 2 个指针传递给 LatLng 对象。只需在没有指针的情况下传递它们:

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