0

それで、私はインターネット上でどこにも言及されていない、かなり具体的な質問があります。

* 演算子をオーバーロードして、定数と配列の一部を乗算できるようにする方法を知りたいです。

私のコード、少なくとも関連性のあるビット、さらに必要な場合は投稿できます:

    licenseCount licenseCount::operator * (const licenseCount& u) const
    {
        return(this->fxdx*u.fxdx, this->y_array*u.y_array);
    }

    int licenseCount::calc_vol(double z, char *argv[])
    {
        int area;
        std::string y_array[9];

        std::ifstream y_data;

        y_data.open( argv[1] );

        if(y_data.fail())
        {
            std::cout << "Can't open file!\n";
            exit(1);
        }

        else
        {
            for(int i=0; i<=9;i++)
            {
                int temp;
                y_data >> y_array[i];
                std::cout << y_array[i] << '\n';

                if(i%2 == 0)
                {
                    temp = 2 * y_array[i];
                    area += fxdx * temp;
                }
                else if(i = 0)
                {
                   area += fxdx * y_array[i];
                }
                else
                {   
                   temp = 4 * y_array[i];
                   area += fxdx * temp;
                }
                std::cout << area;
            }

        vol = area * depth;

        return vol;
    }

私のエラー:

licenseCount.cpp:62: error: 'const class licenseCount' has no member named 'y_array'
licenseCount.cpp:62: error: 'const class licenseCount' has no member named 'y_array'
licenseCount.cpp: In member function `int licenseCount::calc_vol(double, char**)':
licenseCount.cpp:90: error: no match for 'operator*' in '2 * y_array[i]'
licenseCount.cpp:91: warning: converting to `int' from `double'
licenseCount.cpp:95: error: no match for 'operator*' in '((licenseCount*)this)-licenseCount::fxdx * y_array[i]'
licenseCount.cpp:98: error: no match for 'operator*' in '4 * y_array[i]'
licenseCount.cpp:99: warning: converting to `int' from `double'
licenseCount.cpp:111: error: a function-definition is not allowed here before '{' token
licenseCount.cpp:113: error: expected `}' at end of input

インターネットで広範囲に検索しましたが、おそらく私の検索用語が間違っていたのでしょうが、考えられる限りの単語の組み合わせを使用して答えを見つけようとしました。/はぁ

注意してください、これは宿題ですが、あなたの説明/助けは大歓迎です!

4

1 に答える 1

0

y_array と同じ名前空間ではないクラス license count のメンバーである y_array を参照する u.y_array 表記によって、calc_vol のみにローカルな変数である y_array にアクセスしようとしているようです。あなたのコードはの宣言を示しています。

calc_vol ではなく、クラス licenseCount (など) で y_array を std::string として宣言する必要があります。calc_vol の誤った宣言により、y_array の正しいクラス内メンバ宣言がマスクされます。後の y_array[i] の使用は、this->y_array を参照する以外は変更されません ("this->" は暗黙的です)。

クラスメソッドは「this->」なしでインスタンスメソッドを参照できるため、licenseCount で this を使用する必要はありません。

于 2012-09-06T17:50:41.077 に答える