C++错误 C2040:"e":"记录器"的间接级别与"常量标准::异常 &"不同

C++ error C2040: 'e' : 'Logger' differs in levels of indirection from 'const std::exception &'

本文关键字:常量 标准 异常 不同 C2040 错误 记录器 C++      更新时间:2023-10-16

我得到这个错误:

C++错误C2040:"e":"Logger"与"const std::exception&"的间接级别不同

我看到这个错误通常发生在两次声明某个东西时,但我看不出它有什么问题。请看看我的尝试,因为我正在尝试创建一个logger类。

主要.cpp

#include "Logger.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
try
{
    string("abc").substr(10);
}
catch (const exception &e)
{
    Logger e;
}
system("PAUSE");
return 0;
}

我相信您认为您正在将e传递给Logger构造函数,但实际上您正在创建一个名为e的新变量。

代替

catch (const exception &e)
{
    Logger e;
}

尝试

catch (const exception &e)
{
    Logger l(e);
}

这里有您的双重声明,异常eLogger实例。

catch (const exception &e)
                        ^
{
    Logger e;
           ^
}
catch (const exception &e)

创建一个名为e、类型为const exception &的参数。然后

Logger e;

声明了同一作用域中另一个不同类型的e。您需要更改其中一个变量名