尝试通过使用指向函数的指针传递矢量,但是我收到错误消息:
E0349 no operator "*" matches these operands
很确定我也引用正确,所以我不确定为什么会这样。
代码如下:
public:
SortingData Sort(vector<double> *newVect, int arraySize, char choice)
{
clock_t timer;
double duration;
cout << "Insertion Sort:" << endl;
int i, key, j;
if (choice == 'a')
{
timer = clock();
for (i = 1; i < arraySize; i++) {
key = *newVect[i];
j = i - 1;
checks++;
while (j >= 0 && *newVect[j] > key) {
checks++;
*newVect[j + 1] = *newVect[j];
j = j - 1;
swaps++;
}
swaps++;
*newVect[j + 1] = key;
cout << *newVect[i] << " ";
}
}
else if (choice == 'd')
{
timer = clock();
for (i = 1; i < arraySize; i++) {
key = *newVect[i];
j = i - 1;
checks++;
swaps++;
while (j >= 0 && *newVect[j] < key) {
checks++;
*newVect[j + 1] = *newVect[j];
j = j - 1;
swaps++;
}
*newVect[j + 1] = key;
}
}
duration = (clock() - timer) / (double)CLOCKS_PER_SEC;
for (int i = 0; i < arraySize; i++)
{
cout << *newVect[i] << " ";
}
cout << endl;
cout << "Checks: " << checks << endl;
cout << "Swaps: " << swaps << endl;
cout << "Time to complete: " << duration;
return {"Insertion Sort",checks,swaps,duration};
}
};
这是我调用函数的方式:
returnedData[2] = insertionSort.Sort(&data, elementTotal, orderChoice);
答案 0 :(得分:3)
订阅操作符*
的优先级高于取消引用操作符*newVect[i]
的优先级(例如,参考this)。因此,*(newVect[i])
与(*newVect)[i]
相同,在这里没有意义。因此,您必须在此处编写[i]
,以便首先取消对向量的指针,然后再将订阅运算符Ext.define('mypackages.component', {
extend: 'Ext.container.Container',
xtype: 'myaddressfield',
items: [
{
xtype: 'textfield',
fieldLabel: 'Address',
name: 'address',
id: 'address',
labelAlign : 'right',
width: 265,
allowBlank: false
}
],
constructor: function () {
this.callParent();
console.log('I am entering here!!!');
}
});
Ext.define('mypackages.maincomp', {
extend: 'Ext.window.Window',
itemId: 'maincomp',
xtype: 'maincomp',
modal: true,
bodyPadding: 10,
height: 350,
width: 270,
closeAction: 'destroy',
resizable: false,
renderTo: Ext.getBody(),
layout: {
type: 'table',
columns: 1
},
items: [
{
xtype: 'textfield',
fieldLabel: 'Name',
name: 'name',
labelAlign: 'right',
width: 265,
allowBlank: false
},
{
xtype: 'textfield',
fieldLabel: 'Age',
name: 'age',
labelAlign: 'right',
width: 265,
allowBlank: false
},
{
xtype: 'textfield',
fieldLabel: 'Phone',
name: 'phone',
labelAlign: 'right',
width: 265,
allowBlank: false
},
{
xtype: 'myaddressfield'
}
]
});
应用到它。
答案 1 :(得分:0)
在哪里发生错误?在这里您可以访问矢量项目吗?
尝试(*newVect)[i]
首先将指针解除对向量的引用,然后访问向量中的索引。
索引运算符[]
的优先级高于解引用运算符*
的优先级。因此,当您编写*newVect[i]
时,它首先尝试访问指针中的ith元素(即,向量数组中的ith向量,这可能会导致运行时错误),然后对其取消引用。但这不是因为newVect[i]
的类型为vector<double>
,您不能使用*
操作符取消引用。
也许,如果您需要将可修改的向量传递给方法,那么最好还是传递一个引用而不是指针。
SortingData Sort(vector<double> &newVect, int arraySize, char choice)
并像
那样称呼它returnedData[2] = insertionSort.Sort(data, elementTotal, orderChoice)
然后,当您使用向量和访问元素时,不需要取消对指针的引用。
您也可能不需要传递arraySize
参数,因为vector::size()
返回向量中的元素数。