したがって、私はベースクラスを保持するポインターのベクトルを持っています。私はベクトルの中に2つの要素を作成し、抽象化のいくつかの層の後にそれらを交換しようとします。現在、これは爆発し、次のようになりmove.h内部のいくつかのエラーをスローするようにコンパイラーに指示します:いくつかの抽象レイヤーの後にポインターのベクトルでポインターを交換しようとしています
*c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/include/c++/bits/move.h: In function 'void std::swap(_Tp&, _Tp&) [with _Tp = Base]':
D:\My Documents\pointertest2\main.cpp:52: instantiated from here
c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/include/c++/bits/move.h:81: error: cannot allocate an object of abstract type 'Base'
D:\My Documents\pointertest2\main.cpp:7: note: because the following virtual functions are pure within 'Base':
D:\My Documents\pointertest2\main.cpp:11: note: virtual int Base::GetInt()
c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/include/c++/bits/move.h:81: error: cannot declare variable '__tmp' to be of abstract type 'Base'
D:\My Documents\pointertest2\main.cpp:7: note: since type 'Base' has pure virtual functions*
次のようにこの問題は原因コード:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
class Base {
public:
virtual int GetInt() = 0;
int a;
};
class Test : public Base {
public:
int GetInt()
{
return a;
}
};
class Slot {
public:
Base *connected;
};
int main()
{
std::vector<Base*> testVec;
Base *test = new Test;
testVec.push_back(test);
testVec[0]->a = 1;
Base *test2 = new Test;
testVec.push_back(test2);
testVec[1]->a = 2;
Slot slot;
slot.connected = testVec[0];
Slot slot2;
slot2.connected = testVec[1];
Slot* slottemp = &slot;
Slot* slottemp2 = &slot2;
std::swap(*slottemp->connected, *slottemp2->connected);
cout << testVec[0]->GetInt() << endl;
cout << testVec[1]->GetInt() << endl;
return 0;
}
あなたが最後に見ることができます私は、testVec [0]が2を返し、testVec [1]が1を返すことを期待しています。これは、私が探しているスワッピングされた値なので、1です。
私の頭はこれで爆発しています。私は要素0と1として含まれているポインタを交換する代わりの方法に全面的にオープンしています。これはこれまでのところ私が終わったところです。
今感覚。 編集:ちょうどあなたの更新された答えを見た - それは私が探しているようだ、ありがとう。 – dr12
@ dr12、それはあなたが交換しているものに関するすべてです。ベクトルを更新する場合は、私の3番目の例を参照してください。 – bdonlan
多くのおかげで、3番目の例はまさに私が探しているものです – dr12