std::vector<int>
をインスタンス変数として持つクラスを設計しています。実行時にサイズを設定する必要があるので、std::vector
を使用しています。クラスコンストラクタでstd :: vectorを設定します
my_class.h:
#include <vector>
using std::vector;
class MyClass {
int size;
vector<int> vec;
}
my_class.cc:
#include "my_class.h"
using std::vector
MyClass::MyClass(int m_size) : size(m_size) {
vec = new vector<int>(size,0);
}
私がコンパイルしようとすると、私はこれらのエラーメッセージを得る:
g++ -c -Wall my_class.cc -o my_class.o
my_class.cc: In constructor ‘MyClass::MyClass(int):
my_class.cc:4 error: no match for ‘operator=’ in ‘((MyClass*)this)->My_Class::vec = ((*(const allocator_type*)(& std::allocator<int>())), (operator new(24u), (<statement>, ((std::vector<int>*)<anonymous>))))’
make: *** [my_class.o] Error 1
しかし、私は、問題の行を変更する場合:
vector<int> temp(size,0);
vec = temp;
ここに私のコードの関連部分は、
これは問題なくコンパイルされ、目的の動作が得られ、ベクターにアクセスできます
vec[i] // i having been defined as an int yada yada yada
この回避策は問題ありませんが、なぜ動作し、最初の方法が失敗するのかを理解したいと思います。前もって感謝します。
あなたのメンバ変数に割り当てることができるようにするために私の推測では、あなたはJavaやC#から来ているそうであれば、私の重大なアドバイスがある – Chethan
vec' '新しいvector'は'、ポインタでない値を返します。 C++の最初の優れた本を最初に手に入れるために。 –
そして、実際のコードは必ずcopy + pasteメソッドで投稿してください。あなたが投稿したコードは不完全です –