0

以下のコードは、ヘッダーとソース ファイルに分割されています。関数の挿入では、AllBridges ベクトルが初期化されていない (認識していないように見える?) と、nextBridge に値が割り当てられていないことが示されています。

#include <vector>

using namespace std;

class Bridge
{
    public:
        Bridge(int);
        void insert(Bridge);

    private:

        int nextBridge;
        vector<Bridge> AllBridges;
};


#include "StdAfx.h"
#include "Bridge.h"

using namespace std;        

    Bridge::Bridge(int size){
        AllBridges.reserve(size);
        nextBridge= 0;      
    }

    void insert(Bridge AddBridge){
        AllBridges[nextBridge] = AddBridge;
    }
4

3 に答える 3

6

する必要があります

void Bridge::insert(Bridge AddBridge)

それ以外の

void insert(Bridge AddBridge)
于 2012-05-27T00:17:53.470 に答える
3

の一部である機能を複製しようとしていますvector

自分で nextBridge を追跡するのではなく、nextBridge にvectorその仕事をさせて、bridge挿入した の数を追跡する必要があります。指定した場所で ing する代わりに、を使用して の末尾に追加するinsertだけでよいため、コードは次のようになります。push_backvector

Bridge::Bridge(int size){
    AllBridges.reserve(size);
}

void Bridge::insert(Bridge AddBridge){
    AllBridges.push_back(AddBridge);
}

...そして、完全にnextBridgeの定義から簡単に削除できます。Bridge

余談ですが、あなたは根本的な間違いを犯していると思います.1つのブリッジの概念を、すべてのブリッジのコレクションの概念と混同しています。これはよくある間違いですが (初心者ではない人が犯すこともあります)、ほぼ必然的に問題につながります。たとえば、あなたがBridgeあなたのに挿入するそれぞれAllBridgesは、それ自身のものを持ってAllBridgesいます(それはおそらく空ですが、誰が知っていますか).

本当に単一の橋を表現したいだけで、(必要に応じて) 橋のコレクションを表現する別の型がBridge必要ですstd::vector<Bridge>

編集: もう 1 つの可能性を追加する必要があると思います: おそらく、Bridge型がインスタンス化された自身のすべてのインスタンスを追跡することを本当に望んでいるのでしょう。AllBridgesその場合、メンバーにしたいので、staticクラスのすべてのオブジェクトに対して個別のインスタンスではなく、クラスに対して単一のインスタンスを持ちます。

于 2012-05-27T00:24:28.527 に答える
2

を呼び出すreserveと、std::vector要素が追加された場合に、そのような多くの要素をホストするのに十分な容量が確保されます。ベクトルのサイズを変更するのではなく、その容量を変更するだけです。あなたが探しているのは ですresize

メンバー関数の定義Bridge::にもありません。insert

于 2012-05-27T00:18:21.820 に答える