我確定它已被問了100次,但push_back
是一個非常受歡迎的問題,因此在搜索很長時間後我找不到答案。遞歸push_back在自定義類上不起作用
我的問題是,在this page它說,遞歸push_back
應該完美地工作,沒有任何問題在多個層面上。
vector< vector<int> > vI2Matrix; // Declare two dimensional array
vector<int> A, B;
A.push_back(10);
A.push_back(20);
A.push_back(30);
B.push_back(100);
B.push_back(200);
B.push_back(300);
vI2Matrix.push_back(A);
vI2Matrix.push_back(B);
然而,在我的版本,我試圖用一個自定義類Vector3f
,而不是int
。我自然會認爲下面的代碼會起作用,但事實並非如此。它在第一級工作,但不在第二級。
vector< vector<Vector3f> > m;
vector<Vector3f> a;
a.push_back(Vector3f(1,2,3)); // <- 1st level works
m.push_back(a); // <- 2nd level doesn't
返回錯誤代碼是:
gobase.h:343: error: no match for ‘operator=’ in ‘* __result = * __first’
demo1.h:38: note: candidates are: Vector3f& Vector3f::operator=(Vector3f&)
的Vector3f
類是在外部頭文件中定義,是什麼我不應該修改。你認爲在給定的頭文件中缺少什麼東西讓我無法使用push_back
?
以下功能在頭文件中定義:
class Vector3f {
float _item[3];
public:
float & operator [] (int i)
Vector3f(float x, float y, float z)
Vector3f()
Vector3f & operator = (Vector3f & obj)
Vector3f & operator += (Vector3f & obj)
bool operator ==(Vector3f & obj)
}
更新 這裏是頭文件& operator =
:
Vector3f & operator = (Vector3f & obj)
{
_item[0] = obj[0];
_item[1] = obj[1];
_item[2] = obj[2];
return *this;
};
你能告訴我,我應該怎麼修改此使push_back
工作?
看一看在GCC來解決這個問題所需的完整步驟,我張貼作爲一個附加的應答。
你確定'Vector3f'的定義?所有成員函數都被聲明爲private。 – pmr
您需要將「const」添加到聲明中,如下所示:Vector3f&operator =(const Vector3f&obj) – dasblinkenlight
@pmr,我插入了缺失的行。 – zsero