2016-03-06 97 views
1

我试图返回一个指向我函数原型的数组的指针。返回指向数组的指针

class NAV     
{ 
    string date; 
    float nav; 
public: 
    NAV(const string&); 
}; 

const int HistorySize = 300; 

class MutualFund 
{ 
    string ticker; 
    NAV* history[HistorySize]; 
public: 
    MutualFund(const string& ticker_, const string& historyFile); 
    ~MutualFund(); 
    NAV** getArray() const{return history;} 
    void report() const; 

}; 

对于NAV **的getArray()const的{返回历史;},我得到一个编译器错误:

错误:无效的转换,从 'NAV * const的*' 到 'NAV **' [-fmissmissive]

任何想法?

+0

你确实需要指向结构数组的指针吗?也许你只需要数组并返回其在getArray()中的引用 – Joel

+0

如何返回历史数组的引用? – Brian

+0

如果错误意味着'return history'返回'NAV * const *',但您试图将其作为'NAV **'返回。 – kfsone

回答

4

NAV** getArray() const{return history;}const表示程序员承诺调用此函数不会导致MutualFund状态的更改。通过返回一个非const指针NAV**,你可以通过使用返回的指针来改变状态。编译器不会允许这个,并告诉你它只能返回一个指向常量数据的指针:NAV* const*

+0

我在执行时遇到问题你的解决方案当我在NAV **上使用const时,编译器说无效的从NAV * const *转换为const NAV **。有什么方法可以返回成员“历史”?如果是这样,历史返回类型是什么? – Brian

+1

返回类型是'NAV * const *',就像错误消息所述。 – user4581301

0

你的getter是一个const方法,所以在执行过程中,所有数据成员都被认为是const。这就是为什么转换错误说它是从const转换为非const,因为你的返回值是非const的。

+0

不是;除非你做“NAV * const *”,否则你会得到这个铸造错误。 – kfsone

+0

@kfsone啊,相当如此,我错过了在错误行中const后的第二个*。我编辑了这个笔记。尽管如此,const方法转换成员const仍然是正确的,因此取其地址给出了一个指向const数据的指针,这就是为什么它与非常量返回类型不兼容的原因。该方法不应该是const,或者返回类型应该是。 –