c++ - 可选参数向量
问题描述
如何制作可选矢量参数?我读了一些线程以使用指向向量的指针,但出现以下错误:
redefinition of default argument: parameter 1
代码错误 C2572。
void EnumerateProcessInformations(std::vector<DWORD> &o_processId, const std::vector<std::wstring> *o_processName = nullptr)
{
HANDLE hSnapProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
PROCESSENTRY32W process;
process.dwSize = sizeof(PROCESSENTRY32W);
Process32FirstW(hSnapProcess, &process);
do
{
if (process.th32ProcessID != 0)
{
o_processId.emplace_back(process.th32ProcessID);
if (*o_processName != nullptr) { *o_processName.emplace_back(process.szExeFile); }
}
} while (Process32NextW(hSnapProcess, &process));
CloseHandle(hSnapProcess);
}
int main()
{
std::vector<DWORD> processId;
EnumerateProcessInformations(processId, nullptr);
for (auto& p : processId)
{
std::cout << p << std::endl;
}
getchar();
return 0;
}
解决方案
使用指针有两个问题:
您在检查指针之前取消引用
nullptr
. 您不是在检查指针是否为空,而是在检查指向的向量是否为空。您将其声明为指向 a
const vector
,这意味着您不能在向量上调用任何变异方法,例如emplace_back
.
试试这个:
void EnumerateProcessInformations(..., std::vector<std::wstring> *o_processName = nullptr);
...
void EnumerateProcessInformations(..., std::vector<std::wstring> *o_processName)
{
...
if (o_processName) o_processName->emplace_back(process.szExeFile);
...
}
推荐阅读
- ios - 如何在最初通过 Safari 14/iOS 14 加载的 PWA 中保持登录状态?
- angular - 使用自定义单元格编辑器时出错:'ag-grid-angular' 不是已知元素
- java - 为什么 Maven(在 Netbeans 下)没有为目标 JDK 1.6 编译?
- firefox - Firefox - ReferenceError:PaymentRequest 未定义
- javascript - 无法安装 npm 包和依赖项
- deep-learning - 如何估计神经网络的在线训练复杂度?
- regex - 使用正则表达式获取参数
- anylogic - 将 if-else 函数连接到数据库以获取用于存储托盘类型的不同 id
- python - 如何使用 SqlAlchemy 和烧瓶显示新闻和查询类别?
- python - 如何在 django 中对对象数组进行排序?