2016-03-06 4 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; 

}; 

Для СЧА ** GetArray() сопзИте {вернуть историю;}, я получаю ошибку компиляции:

ошибки: недопустимое преобразование из 'СЧА * сопзЬ *' до 'СЧА **' [-fpermissive]

Любые идеи?

+0

Вам действительно нужен указатель на массив структур? Может быть, вам нужен только массив и вернуть его ссылку в getArray() – Joel

+0

Как бы вы вернули ссылку на массив истории? – Brian

+0

FYI ошибка означает, что 'return history' возвращает' NAV * const * ', но вы пытаетесь вернуть его как' NAV ** '. – kfsone

ответ

4

В NAV** getArray() const{return history;}const означает, что программист обещает, что вызов этой функции не приведет к изменению состояния MutualFund. Возвращая указатель non-const, NAV**, вы открываете возможность изменения состояния с помощью возвращаемого указателя. Компилятор не допустит этого и говорит вам, что он может только возвращать указатель на постоянные данные: NAV* const*.

+0

У меня возникли проблемы с реализацией ваше решение. Когда я использую const на NAV **, компилятор говорит о некорректном преобразовании из NAV * const * в const NAV **. Есть ли способ вернуть «историю» члена? Если да, то каков был бы тип возврата истории? – Brian

+1

Тип возврата - 'NAV * const *', как и сообщение об ошибке. – user4581301

0

Ваш геттер является методом const, поэтому во время его выполнения все члены данных также считаются const. Вот почему ошибка преобразования говорит о том, что она преобразуется из константы в неконстантную, так как ваше возвращаемое значение не является константой.

+0

Nope; вы получаете эту ошибку кастинга, если вы не делаете «NAV * const *». – kfsone

+0

@kfsone Ах, совершенно так, я пропустил, что в строке ошибки была вторая * после const. Я отредактировал эту заметку. Тем не менее, все же верно, что метод const вызывает член const, поэтому его адрес дает указатель на const-данные, поэтому он несовместим с неконстантным возвращаемым типом. Либо метод не должен быть const, либо должен быть тип возврата. –