2016-08-18 2 views
-2

Это обычный вопрос, но я не могу заставить его работать.Передача по значению и указателем

Это прототип функции: void QSerialPort::setPort(const QSerialPortInfo &serialPortInfo) , и я пытаюсь использовать его, как это:

QSerialPortInfo *serialPortInfo = new QSerialPortInfo("H"); 
QSerialPort *SerialPort=new QSerialPort; 
SerialPort->setPort(&serialPortInfo); 

Как я понимаю, в прототипе мы имеем ссылку на объект, но у меня есть указатель на QSerialPortInfo , поэтому я все равно нас &. Все это не работает.

Что я делаю неправильно?

+1

, так как ваш 'serialPortInfo' имеет тип' QSerialPortInfo * ',' & serialPortInfo' имеет тип '' QSerialPortInfo **. – Xiobiq

+4

Вы указатели разыменования с '*', а не '&'. Кроме того, почему эти указатели на динамическую память в первую очередь? – GManNickG

ответ

1

QSerialPortInfo не должно быть динамически распределено (это не QT-путь, я знаю).

В вашем случае это должно быть SerialPort->setPort(*serialPortInfo), так как вам нужно разыменовать указатель для передачи переменной по ссылке.

Но этот код должен быть написан как здесь:

+0

Большое спасибо! Я знаю, что имя неверно, я запускаю его на Linux, и, поскольку я не знал правильно порт, я использовал этот «H». Что касается динамического распределения, я не знал, что это не оптимальный способ. – Ivan

+1

@Ivan Правило большого пальца - избегайте новых, если это возможно. В QT иногда вы не можете этого сделать, но всегда старайтесь. – Starl1ght

Смежные вопросы