Примечание заранее: Проблема связана с векторным классом, реализованным мной, и не имеет ничего общего с std :: vector 1004
. Рассмотрим следующее перегрузка оператора:
//in the Vector-class(declaration)
friend Vector operator+(const Vector& a, const Vector& b);
//outside the Vector-class(implementation)
Vector operator+(const Vector& a, const Vector&b) {
//...
}
Он принимает ссылки на два вектора и возвращает их сумму.Теперь, когда я пытаюсь что-то вроде следующего:
Vector foo();
Vector bar();
Vector byVal = foo + bar; //using objects
Vector byRef = &foo + &bar; //using address
, в обоих случаях моя IDE сообщает мне следующее:
выражение должно иметь целочисленный или незавершенный тип enum
Inво втором случае это имеет смысл, потому что я мог бы передать возвращаемый указатель только тогда, когда вызываемая функция взяла бы указатель, а для функции, которая берет ссылку, я могу передать сам объект, но я не понимаю, почему просто использование объекта здесь невозможно.
Что делает меня более запутанным, так это то, что следующее представляется возможным:
Vector* foo = new Vector();
Vector* bar = new Vector();
Vector foobar = *foo + *bar;
То есть я могу использовать разыменованные указатели с перегруженным оператором.
В чем причина этого поведения и как я должен использовать свой перегруженный оператор в этом случае?