这是代码。
val stack = Array(inputString.length + 1) { "" }
var current = 0
for ((i, char) in inputString.withIndex()) {
if (char == '(') {
current += 1
continue
} else if (char == ')') {
val enclosedString = stack[current]
stack[current - 1] = stack[current - 1] + enclosedString.reversed()
current -= 1
continue
} else {
stack[current] += char //here's the compile time error
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息“没有设置方法提供数组访问”。我不明白这个。
如果我将其更改为:
stack[current] = stack[current] + char
Run Code Online (Sandbox Code Playgroud)
一切正常。
为什么会这样?
我正在开发一个替代IFileOpenDialog和IFileSaveDialog。
我几乎可以使用它(至少是IFileOpenDialog),但是当我要返回IShellItem代表新文件名(用户已选择保存在GetResult()方法中)的时,我将无法SHParseDisplayName使用该新文件名。我总是收到一个错误"The system cannot find the file specified"。
我将欣赏一些示例或其他解决方案,也许可以解决我的问题。
编辑:
HRESULT CFileSaveDialogProxy::GetResult( __RPC__deref_out_opt IShellItem **ppsi)
{
//return m_Original->GetResult(ppsi);
WCHAR pszPath[MAX_PATH] = {0};
HRESULT hr = ERROR_CANCELLED;
if (m_SelectedFiles.size() > 0)
{
QString s = m_SelectedFiles.at(0);
s.replace(QString("/"),QString("\\"));
s.toWCharArray(pszPath);
//PCIDLIST_ABSOLUTE pIdL = ILCreateFromPath(pszPath);
PIDLIST_ABSOLUTE pIdL = NULL;
SFGAOF out;
hr = SHParseDisplayName(pszPath,NULL,&pIdL,SFGAO_FILESYSTEM,&out);
if (SUCCEEDED(hr))
{
hr = SHCreateItemFromIDList(pIdL, IID_PPV_ARGS(ppsi));
}
}
return hr;
}
Run Code Online (Sandbox Code Playgroud)