std::abs
принимает любое из:
Однако, до C ++ 17, если вы не [ 117], тогда доступны только целочисленные перегрузки (первые три в списке). Вы передаете float
, который одинаково хорошо конвертируется в любые три из них, поэтому компилятор не может сказать, какой из них вы хотели.
Если бы вы действительно хотели целочисленную перегрузку, вы бы использовали приведение к int
, long
или long long
, в зависимости от ситуации.
Но вы этого не сделаете: вы хотите вызвать перегрузку float
, поэтому перенесите ее в область действия с помощью #include
, и тогда она будет автоматически выбрана, потому что вы передаете float
.
На самом деле, на самом деле, вам просто повезло , что даже целочисленные перегрузки доступны, потому что вы никогда #include
d
; у
вашей инструментальной цепочки должно быть , как это случилось , чтобы сделать это для вас. Всегда включайте соответствующие заголовки в соответствии с документацией.
Я бы на самом деле использовал прототип Exts createDelegate.
var appendBooleanOrInsertionIndex = 0; // Inserts the variables into the front of the function.
appendBooleanOrInsertionIndex = true; // Appends the variables to the end of the arguments
var myButton = new Ext.Button({
id : 'myButton',
renderTo : 'mybutton',
text : 'Save',
handler : myButtonHandler.createDelegate(this, [param1, param2], appendBooleanOrInsertionIndex),
scope : this
});
Я не знаю то, что это, что Вы хотите передать, но использование обертки могло помочь:
var myButtonHandler = function (button, event, additionalData){
//code goes here
};
var myButton = new Ext.Button({
id : 'myButton',
renderTo : 'mybutton',
text : 'Save',
handler : handlerWrapper,
scope : this
});
var handlerWrapper = function (button, event){
// Fetch additional data
var additionalData = "whatever";
myButtonHandler(button, event, additionalData);
};