2015-05-28 4 views
-3

Пожалуйста, помогите мне и позвольте мне задать глупый вопрос. Я объявила переменную x как DeriveType (DeriveType - это класс). Я хочу назначить int y для x, например int y = x Но когда я компилирую, компилятор показывает ошибку error: не может преобразовать 'const DerivType' в 'int' Пожалуйста, скажите мне, как решить эту проблему , спасибо. уважением,Назначить тип переменной и класс

Это класс DerivType

class DerivType; 

typedef DerivType (*ddf_FctPtr)(const DerivType&); 

class DerivType { private: interval f, df, ddf; 

public: DerivType (); 
DerivType (const interval&, const interval&, const interval&); 
DerivType (const DerivType&); 

DerivType& operator= (const DerivType&); 

friend DerivType DerivConst (const real&); 
friend DerivType DerivConst (const interval&); 
friend DerivType DerivVar (const real&); 
friend DerivType DerivVar (const interval&); 

friend inline const interval fValue (const DerivType&); 
friend inline const interval dfValue (const DerivType&); 
friend inline const interval ddfValue (const DerivType&); 

friend DerivType operator+ (const DerivType&); 
friend DerivType operator- (const DerivType&); 

.... 

И у меня есть функция любит это.

DerivType f (const DerivType& x) 
{ 
     DerivType result; 
     DerivType xx; 
     double sum; 
     xx = x; 
     //Convert x from DerivType to double 
     void *pVoidx = &xx;          [1] 
     double *pDoublex = static_cast<double*>(pVoidx);  [2] 
     MLPutReal(lp, *pDoublex); 

     MLGetReal(lp, &sum); 

     //Convert from double to DerivType for the return value of function 
     printf("x = %f, result = %f\n", *pDoublex, sum); 
     void *pSum=&sum;           [3] 
     DerivType *pDerivTypeSum = static_cast<DerivType*>(pSum); [4] 
    return *pDerivTypeSum; 
} 

Эта функция работает надлежащим образом. Но мой учитель сказал, что это не хороший код, потому что даже код работает в этом случае, он по-прежнему зависит от реализации и зависит от архитектуры. (Он дает мне ссылку: http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=195[ ^])

Помогите мне улучшить этот код, а именно [1], [2], [3], [4].

Моя идея в том, как конвертировать из DerivType в double/int и наоборот.

Благодарим за чтение и помощь.

Я очень appriciate о ваших намеках.

искренне Ваш

Большое спасибо уважением,

+1

Что следует преобразовывать из 'DeriveType' в значение' int'? Вероятно, вы должны написать оператор преобразования. – TartanLlama

ответ

0

Если это имеет смысл, чтобы преобразовать тип в int, то вы можете предоставить оператор преобразования:

class DeriveType { 
    //... 
    operator int() {return <some integer value>;} 
    //... 
}; 

Если это не имеет смысла, тогда не пишите код, который пытается это сделать.

+0

Спасибо за ваш ответ. Ты очень мил. – nothingx0x

+0

Дорогой Про, как я могу использовать ваши хиты, я не могу использовать: int y = (int) x; Он не работает – nothingx0x

+0

@ nothingx0x: Если преобразование имеет смысл, тогда вам придется добавить оператор преобразования, как я уже сказал. Если это не имеет смысла, тогда не пытайтесь это делать, как я уже сказал. –

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