C++ 可选参数向量
如何制作可选的矢量参数?我在一些线程中读到使用指向向量的指针,但我得到以下错误:C++ 可选参数向量,c++,C++,如何制作可选的矢量参数?我在一些线程中读到使用指向向量的指针,但我得到以下错误: redefinition of default argument: parameter 1 代码错误为C2572 void EnumerateProcessInformations(std::vector<DWORD> &o_processId, const std::vector<std::wstring> *o_processName = nullptr) { HAN
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;
}
void枚举进程信息(std::vector&o_processId,const std::vector*o_processName=nullptr)
{
HANDLE hSnapProcess=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,NULL);
PROCESSENTRY32W工艺;
process.dwSize=sizeof(PROCESSENTRY32W);
Process32FirstW(hsnaprocess和process);
做
{
if(process.th32ProcessID!=0)
{
o_processId.emplace_back(process.th32ProcessID);
如果(*o_processName!=nullptr){*o_processName.emplace_back(process.szExeFile);}
}
}while(Process32NextW(hSnapProcess和process));
关闭手柄(hsnaprocess);
}
int main()
{
std::向量processId;
枚举ProcessInformation(processId、nullptr);
用于(自动&p:processId)
{
std::cout使用指针有两个问题:
- 在检查指针是否为
nullptr
之前,您正在取消对指针的引用。您不是在检查指针是否为null,而是在检查指针指向的向量是否为null
- 您将其声明为指向一个
常量向量
,这意味着您不能调用向量上的任何变异方法,如emplace\u 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);
...
}
void枚举进程信息(…,std::vector*o_processName=nullptr);
...
void枚举进程信息(…,std::vector*o_进程名)
{
...
if(o_processName)o_processName->emplace_back(process.szExeFile);
...
}
此外,问题中引用的错误是在函数定义中应用的结果。默认参数只能在函数声明中使用。某些结果重新定义了默认参数1@IInspectable是的,但是如果是单独在同一个cpp文件中实现的独立函数,它的声明和定义可能是一回事。OP代码的呈现方式可能就是这种情况。OP呈现编译器错误的事实足以推断OP发布的代码不完整,并且在定义之前有一个声明。请发布您得到的确切错误消息。“重新定义"不是单词。如果您在非英语系统上运行Visual Studio,请获取英语错误消息。@IInspectable默认参数的错误nessage重新定义:参数1,代码错误C2572。当我检查以解决此问题时,默认参数应未定义。如何使默认参数未定义?@stephenju在某处发布完整代码。是否您是否已声明EnumerateProcessInformation()?