0

このエラーについて調査しましたが、解決策が見つかりませんでした。仮想関数 compute() を持つ基本クラス Convert と、派生クラス L_To_G (リットルからガロン) があります。私の main.cpp ファイルでは、ステートメント:

p = &L_To_G(数値);

次のエラーが表示されます。

../main.cpp: 関数 'int main()' 内:

../main.cpp:37:20: エラー: 一時アドレスの取得 [-fpermissive] p = &L_To_G(num);

ヘッダー ファイルのコード:

class Convert
{
  protected:
    double val1, val2; //data members
  public:
    Convert(double i) //constructor to initialize variable to convert
    {
        val1 = i;
        val2 = 0;
    }
    double getconv() //accessor for converted value
    {
        return val2;
    }
    double getinit() //accessor for the initial value
    {
        return val1;
    }
    virtual void compute() = 0; //function to implement in derived classes
    virtual ~Convert(){}
};

class L_To_G : public Convert  //derived class
{
  public:
     L_To_G(double i) : Convert(i) {}

     void compute() //implementation of virtual function
     {
        val2 = val1 / 3.7854;  //conversion assignment statement
     }
};

main.cpp ファイルのコード:

int main()
{
    ...
  switch (c)
  {
     case 1:
     {
        p = &L_To_G(num);
        p->compute();
        cout << num << " liters is " << p->getconv()
        << " gallons " ;
        cout << endl;
        break;
      }
    ...
4

2 に答える 2

2

問題は基本型または派生型とは関係ありません。ポインターを一時型に参照させようとしていますが、これは許可されていません。

T *p = &T(); // reproduces the same issue for any T
于 2013-09-20T17:38:08.403 に答える