0

定数 double へのポインター型の 2 つのパラメーターを持ち、double へのポインター型を返す ComputeMaximum という名前の関数を作成しようとしています。

次のキャスト エラーが発生し続けます。

  1. 「const double*」から「double*」への無効な変換</li>
  2. 引数 '1' を 'double* ComputeMaximum(const double*, const double*)' にするために 'double' を 'const double*' に変換できません</li>
#include <iostream>
using namespace std;

double *ComputeMaximum(const double *num1, const double *num2)
{
    return ((double*)num1>num2?num1:num2);  
}

int main()
{
    double *max;

    max = ComputeMaximum(6.4, 6.9);
    cout << *max;

    return 0;
}
4

5 に答える 5

2

6.4, 6.9浮動小数点リテラル (または) 定数値であり、ポインターに変換することはできません。必要なのはdouble、関数のパラメーターの型と同じですが、double*.

ポインターは場所のアドレスを指し、値自体を保持することはできません。だから、試してみてください

double ComputeMaximum(const double num1, const double num2)
// Notice * are removed.
{
   // ....
}
于 2012-07-22T13:43:14.540 に答える
1

彼が実際にポインターを渡し、ポインターを返したい場合 (これが宿題でない限り理由を考えることができません)

#include <iostream>
using namespace std;

double *ComputeMaximum(double *num1,double *num2)
{
    return (* num1 > * num2 ?num1:num2);  // need to dereference the comparison
}

int main()
{
    double *max;
    double a = 6.4;
    double b = 6.9; // need to be variables with real adresses, literals won't work

    max = ComputeMaximum(&a, &b); // pass pointers to a and b
    cout << *max;

    return 0;
}
于 2012-07-22T14:02:01.763 に答える
0

無効なパラメータがあり、コンパイラはこの種の暗黙的な変換を許可しません。

max = ComputeMaximum(6.4, 6.9);

ヘッダーファイルは次のとおりです。

double *ComputeMaximum(const double *num1, const double *num2)

引数としてaを渡すかconst double *、宣言を次のように変更します。

double *ComputeMaximum(const double num1, const double num2)
double *ComputeMaximum(const double &num1, const double &num2)

ただし、これはあなたの場合に有効です:

double a = 6.4;
double b = 6.9;
max = ComputeMaximum(&a, &b);

効率が必要な場合は、値を指定するかexplicit cast、メソッドの宣言を変更するか、参照を使用できます。

于 2012-07-22T13:50:14.080 に答える
0

Maheshの優れたソリューションの代わりに、ComputeMaximum関数を呼び出す前に変数に倍精度浮動小数点数を格納してから、addressof演算子を使用&してメモリ内の位置を返すことができます。

double a = 6.4; 
double b = 6.9; 

max = ComputeMaximum(&a, &b);

ただし、ポインタ自体ではなく、ポイントされたを比較するように関数を変更する必要もあります。

double *ComputeMaximum(const double *num1, const double *num2)
{
    double a = *(num1);
    double b = *(num2);

    return (double*)(a > b ? a : b);  
}
于 2012-07-22T13:50:22.153 に答える
0

const_castを使用してconst値を非const値にキャストすることもできますが、これはほとんどの場合悪い考えです。唯一の正当な使用法は、文字列を非const charポインターとして期待しているが、実際には変更しないレガシーライブラリとのインターフェースです。

于 2012-07-22T13:51:36.097 に答える