我正在設計一個具有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
這種解決方法是可以的,但我想了解它爲什麼可行,第一種方法失敗。提前致謝。
'新VECTOR'返回一個指針不是一個值,你可以把它分配給你的成員變量'vec' – Chethan 2012-07-10 14:33:05
我的猜測是你來自Java或C#如果是這樣,我認真建議是首先要獲得一本好的,介紹性的C++書籍。 – 2012-07-10 15:11:16
請始終通過複製粘貼方法發佈實際代碼。你發佈的代碼是不完整的 – 2012-07-10 15:11:51