如何制作可选的矢量参数?我读了一些线程以使用指向矢量的指针,但出现以下错误:
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;
}
答案 0 :(得分:0)
使用指针有两个问题:
您要先取消引用指针,然后再检查其nullptr
。您不是要检查指针是否为空,而是要检查指向的向量是否为空。
您将其声明为指向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);
...
}