1

このコードでエラーが発生しています

class business
{
    public:
        business();  // Default Constructor
        business(string busines,int r)
        {
            busines=busines;
            ratings=r;
        }   // constructor;

    private:

        string busines;
        int ratings;
        int items_owned;
        int business_cancellation;
        int biz_size_of_building;
        int biz_shipping_method;
};

int main(int argc, char *argv[])
{
    business b[10];

    b[b_count](busines,rating);

    return 0;
}

次のエラーが表示されます(http://ideone.com/FfajNS):

prog.cpp: In function ‘int main(int, char**)’:
prog.cpp:32:32: error: no match for call to ‘(business) (std::string&, int&)’
4

4 に答える 4

3

すでに構築されているオブジェクトでコンストラクターを呼び出そうとしています...配列の作成中にデフォルトのコンストラクターが呼び出されたため、オブジェクトを再度「構築」することはできません。アプリケーションではstd::vector、デフォルトの引数のセットから初期化されたオブジェクトを使用して配列のようなコンテナーを作成できる場所の使用を検討することをお勧めします。

たとえば、次のことができます。

std::vector<business> array(10, business(business_string, rating));
于 2013-03-14T17:49:27.717 に答える
1

私はあなたがこのようなものが欲しいと信じています:

b[2] = business("Denny's", 50);

これにより、指定されたパラメーターを使用してコンストラクターを呼び出すことにより、一時的なビジネス変数が作成されます。次に、一時的なものがアレイのスロット3にコピーされbます。

于 2013-03-14T20:24:07.953 に答える
1

配列は、そのクラスのコンストラクターをb使用して、すでに 10 個のビジネス オブジェクトを作成しています。defaultこれらのオブジェクトにアクセスするには、business someBusiness = b[someIndex];

編集:

個々のオブジェクトの値を設定する場合は、次のようにします (これらのオブジェクトを作成するのではなく、値を設定するだけであることに注意してください)。

for(int i=0; i<10; i++)
{
    b[i].busines = ...;
    b[i].ratings = ...;

    /* or to create new ones */

    b[i] = business("asd", 10);
}

vectorJasonが提案したように、これらのオブジェクトをに保存するとさらに良いでしょう

于 2013-03-14T17:52:55.497 に答える
0
   business b[10];

10 個の「デフォルト」ビジネス オブジェクトを作成します。b_count とは何ですか? 0 から 9 までの int を希望します。しかし、ここでは 2 つの引数を持つビジネス オブジェクトを「呼び出し」ています。

   b[b_count](busines,rating);

しかし、ビジネスはoperator()()2つのパラメーターで定義されていません。

編集:std::vector他の回答を使用して注意深く読む必要があります。しかし、初心者が STL ライブラリを使用することを許可されていない場合があることは知っています。とにかく、コンストラクターの使用方法と配列の要素の初期化方法を理解する必要があるようです。静的メンバーとその定義方法について読んで、次の例がどのように機能するかを理解してください。

#include <string>
using std::string;
class business
{
    public:
        business()                        // Default Constructor
            :busines(def_busines),ratings(def_ratings){}; 
        business(const string& bus,int r)   // constructor;
            :busines(bus),ratings(r){}

        static void SetDef(const string& busines,int r)
        {
            def_busines=busines;
            def_ratings=r;
        }

    private:

        string      busines;
        int         ratings;
        static string def_busines;
        static int def_ratings;
        int items_owned;
        int business_cancellation;
        int biz_size_of_building;
        int biz_shipping_method;

};
    string business::def_busines="";  // Set here the default-defaults
    int business::def_ratings=1;

int main(int argc, char *argv[])
{
    business::SetDef("Some business",2);
    business a[10];

    business::SetDef("Other business",3);
    business b[10];

    business c("Third business",4);


    return 0;
}
于 2013-03-14T17:54:44.517 に答える