2017-01-22 3 views
0

В настоящее время, в моем коде я имеюКак я могу передать инициализирован объект

vector_2 v1(1.0,2.0); 
Frame.Draw(v1(2.0f,1.0f)); 

где vector_2 является структурой с конструктором, который принимает 2 двойников (координаты). Frame - это экземпляр некоторого класса с функцией, которая принимает параметр vector_2 в качестве параметра. Это компилируется просто отлично и так, как я хочу.

Однако, когда я непосредственно попробовать без инициализации вектора до вызова функции, например .:

Frame.Draw(vector_2 v1(2.0f,1.0f)); 

Компилятор выдает сообщение об ошибке: ожидаемое первичное-выражение перед v1. Я надеялся непосредственно инициализировать функцию вызова функции.

Интересно, возможно ли это на C++, возможно, я не знаю правильного синтаксиса.

+5

'Frame.Draw ({2.0f, 1.0f }); ' – AndyG

+0

Это работает. Благодарю. Почему фигурные скобки? Чтобы я мог понять свою ошибку. Возможно ли это также при инициализации объекта непосредственно в конструкторе, например. someClass :: someClass(): SomeOtherObject ({1.0,2.0f}) {...} – Majte

+0

Он непосредственно инициализирует вашу структуру. Подумайте об этом как о способе передачи аргументов, которые могут быть использованы для построения 'vector_2', необходимого для вызова функции. – AndyG

ответ

0

Вы объявляете переменную внутри аа вызова:

Frame.Draw(vector_2 v1(2.0f,1.0f)); 

Вы должны сделать это, что вместо того, чтобы объявить переменную объявляет временный непосредственно внутри Frame.Draw:

Frame.Draw(vector_2{2.0f, 1.0f}); 

или

Frame.Draw(vector_2(2.0f, 1.0f)); 

в зависимости от того, как вы заявили о вещах. Будьте осторожны с инициализации в C++, это совершенно сбивает с толку, ибо взять несколько подводных камней и вообще рабочего посмотреть здесь: