2011-10-17 2 views
2

Ошибка при присвоении значения массиву. У меня есть класс, который я создал, с именем Treasury. Я создал еще один класс под названием TradingBook, который я хочу содержать глобальный массив Treasury, доступ к которому можно получить из всех методов в TradingBook. Вот мои файлы заголовков для TradingBook и казначейства:C++ Ошибка: нет соответствия для 'operator ='

class Treasury{ 
public: 
    Treasury(SBB_instrument_fields bond); 
    Treasury(); 
    double yieldRate; 
    short periods; 
}; 


class TradingBook 
{ 
public: 
    TradingBook(const char* yieldCurvePath, const char* bondPath); 
    double getBenchmarkYield(short bPeriods) const; 
    void quickSort(int arr[], int left, int right, double index[]); 

    BaseBond** tradingBook; 
    int treasuryCount; 
    Treasury* yieldCurve; 
    int bondCount; 
    void runAnalytics(int i); 
}; 

А вот мой основной код, где я получаю сообщение об ошибке:

TradingBook::TradingBook(const char* yieldCurvePath, const char* bondPath) 
{ 
    //Loading Yield Curve 
    // ... 
    yieldCurve = new Treasury[treasuryCount]; 

    int periods[treasuryCount]; 
    double yields[treasuryCount]; 
    for (int i=0; i < treasuryCount; i++) 
    { 
     yieldCurve[i] = new Treasury(treasuries[i]); 
     //^^^^^^^^^^^^^^^^LINE WITH ERROR^^^^^^^^^^^^^^ 
    } 
} 

Я получаю сообщение об ошибке:

No match for 'operator=' on the line 'yieldCurve[i] = new Treasury(treasuries[i]);'

Любые советы?

+3

Это то же самое, что вы [спросили о вчерашнем] (http://stackoverflow.com/questions/7781292/c-when-to-exactly-use-error-base-operand-of-has-non- указатель типа). Единственное различие заключается в том, что это происходит с другой переменной. Возможно, пришло время инвестировать в хорошую книгу на C++, так как ваше понимание массивов и указателей могло бы улучшить. –

ответ

9

Это потому, что yieldCurve[i] имеет тип Treasury и new Treasury(treasuries[i]); является указателем на Treasury объекта. Таким образом, у вас есть несоответствие типа.

Попробуйте изменить эту строку:

yieldCurve[i] = new Treasury(treasuries[i]); 

к этому:

yieldCurve[i] = Treasury(treasuries[i]); 
+6

Если это ответит на ваш вопрос, обязательно проверьте флажок ... – JeremyFromEarth

2
Treasury* yieldCurve; 

yieldCurve является указателем на массив Treasury, не Treasury*. Отбросьте new в строке с ошибкой или измените объявление для него как массив указателей.

Смежные вопросы