2014-07-07 114 views
-1

我创建了一个基类和该类的数组。我想将这个数组传递给另一个类。我究竟做错了什么?有没有更完美的方法来完成这个?在C++中将对象数组传递给另一个类

class WaypointClass 
{ 
private: 
    float latitude, longitude; 
public: 
    WaypointClass(int lt, int lg) 
    { 
     latitude = lt; 
     longitude = lg; 
    } 
}; 

class WaypointList 
{ 
private: 
    int currentWaypoint; 
    WaypointClass *waypointList; 

public: 
    WaypointList(WaypointClass *waypoints) 
    { 
     waypointList = &waypoints; 
     currentWaypoint = 0; 
    } 
}; 

const WaypointClass waypoints[] = 
{ WaypointClass(1, 2), WaypointClass(3, 4), WaypointClass(5, 6) }; 

WaypointList myWaypoints(&waypoints); 
+2

究竟什么不起作用? – xmoex

+0

我认为这是waypointList = waypoints;而不是waypointList =&waypoints;因为waypointList不是** – Lefsler

+0

我得到以下错误:错误:没有匹配的函数调用'WaypointList :: WaypointList(const WaypointClass(*)[3])' – user3813960

回答

4

不知道你的错误信息是什么,我马上就可以看到一对夫妇的错误:

您声明您的数组为const,这意味着每一个元素不能被改变。但WaypointList接受一个非const指针,这意味着它期望能够改变每个元素。这可能是你的编译器错误。

此外,foo []自动转换为foo *,因此您不需要使用&取消引用您的数组。

你的第二个问题是你将数组传递过来,但是你不会传递数组的长度,这意味着WaypointList将不知道数组中有多少个航点。

+0

@ user3813960评论不是提问的正确方式。没有人可以阅读你的代码示例,以及如何以堆栈溢出的方式回答它? – xmoex

0
  1. 当您将数组作为参数传递时,不应该使用引用运算符(&)来传递它。这样你就传递指向该数组的指针,这不是你想要的。

  2. 如果数组必须被声明为const,也是在函数签名的参数应该是const e.x:WaypointList(const WaypointClass *waypoints)

0

你真的应该使用std::vector而不是阵列。

你也应该在正文中使用初始化列表在构造函数,而不是分配的,如果你的成员变量是float S,你应该使用在你的构造函数的参数列表,而不是int

所以这个:

WaypointClass(int lt, int lg) 
{ 
    latitude = lt; 
    longitude = lg; 
} 

变为这样:

WaypointClass(float lt, float lg) 
    : latitude(lt) 
    , longitude(lg) 
{} 

如果你使用的载体,你将不再需要WaypointList类。

在这里,有一定的参考:http://en.cppreference.com/w/cpp/container/vector

0

我想我会接近它略有不同。我会使用std::vector来包含航点列表。如果你使用C++ 11(你为什么不这样做?),你可以定义一个构造函数来直接接受括号内的初始化列表。一个完整的程序展示了如何做到这一点是在这里:

#include <algorithm> 
#include <initializer_list> 
#include <iostream> 
#include <vector> 

class WaypointClass 
{ 
private: 
    float latitude, longitude; 
public: 
    WaypointClass(float lt, float lg) : latitude(lt), longitude(lg) {} 
    friend std::ostream& operator<<(std::ostream &out, const WaypointClass &wp) 
    { 
     return out << "(" << wp.latitude << ", " << wp.longitude << ')'; 
    } 
}; 

class WaypointList 
{ 
private: 
    std::vector<WaypointClass> m_vector; 
public: 
    WaypointList(std::initializer_list<const WaypointClass> w) 
     : m_vector(w.begin(), w.end()) {} 
    friend std::ostream &operator<<(std::ostream &out, const WaypointList &wl) { 
     for (const auto &wp : wl.m_vector) 
      out << wp << '\n'; 
     return out; 
    } 
}; 

int main() 
{ 
    WaypointList myWaypoints{ WaypointClass(1, 2), WaypointClass(3, 4), 
     WaypointClass(5, 6) }; 
    std::cout << myWaypoints << '\n'; 

} 

正如预期的那样,这个打印:

(1, 2) 
(3, 4) 
(5, 6) 

当然,你需要添加更多的类,使他们真正有用的,但这说明了这些概念。

相关问题