Я уверен, что его задавали 100 раз, но push_back
такой популярный вопрос, что я не мог найти ответ после долгого поиска.
Моя проблема в том, что на этой странице написано, что рекурсивный 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
.Естественно, я думаю, что следующий код будет работать, но это не так.Он работает на 1-м уровне, но не на 2-м.
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, я разместил его в качестве дополнительного ответа.