error C3615: constexpr 函数
时间: 2023-08-09 19:04:38 浏览: 326
constexpr 函数是在编译时求值的函数。它们用于在编译时计算结果,并将结果作为常量使用。然而,C++标准并不允许所有类型的函数都可以声明为constexpr。
错误C3615是Visual Studio编译器的错误代码,它表示声明为constexpr的函数存在某些限制,不符合C++标准中constexpr函数的要求。
要使用constexpr函数,函数必须满足以下条件:
1. 函数必须是常量表达式,即在编译时能够确定结果。
2. 函数的返回类型必须是字面类型(literal type)。
3. 函数体内只能包含一些特定类型的语句和表达式,如return语句、条件语句、循环语句等。
如果你遇到了C3615错误,可能是因为你的函数不满足上述条件之一。你可以检查代码,确保函数满足constexpr函数的所有要求,并根据需要进行修改。
相关问题
你给出的上面的代码有这样的错误main.cpp: In constructor 'Rect::Rect(Point, Point)': main.cpp:20:32: error: no matching function for call to 'Point::Point()' Rect(Point tl_, Point br_) { ^ main.cpp:20:32: note: candidates are: main.cpp:11:5: note: Point::Point(int, int) Point(int x_, int y_) { ^ main.cpp:11:5: note: candidate expects 2 arguments, 0 provided main.cpp:8:7: note: constexpr Point::Point(const Point&) class Point { ^ main.cpp:8:7: note: candidate expects 1 argument, 0 provided main.cpp:8:7: note: constexpr Point::Point(Point&&) main.cpp:8:7: note: candidate expects 1 argument, 0 provided main.cpp:20:32: error: no matching function for call to 'Point::Point()' Rect(Point tl_, Point br_) { ^ main.cpp:20:32: note: candidates are: main.cpp:11:5: note: Point::Point(int, int) Point(int x_, int y_) { ^ main.cpp:11:5: note: candidate expects 2 arguments, 0 provided main.cpp:8:7: note: constexpr Point::Point(const Point&) class Point { ^ main.cpp:8:7: note: candidate expects 1 argument, 0 provided main.cpp:8:7: note: constexpr Point::Point(Point&&) main.cpp:8:7: note: candidate expects 1 argument, 0 provided 详细评判结果 »
这个错误是因为在 Rect 类的构造函数中调用了 Point 类的构造函数,但是没有提供任何参数。根据错误信息,Point 类有三个候选构造函数,但是都需要至少一个参数。
你需要在创建 Rect 对象时为 Point 对象提供所需的参数。例如:
```
Point tl(0, 0); // 创建左上角点
Point br(10, 10); // 创建右下角点
Rect rect(tl, br); // 创建矩形对象
```
这样就可以避免上述错误。
C:\Users\闫秋帅\AppData\Local\Temp\.arduinoIDE-unsaved2023620-30356-1nrx2ou.4y9i\sketch_jul20a\sketch_jul20a.ino:10:8: error: no matching function for call to 'Ticker::Ticker()' In file included from C:\Users\闫秋帅\AppData\Local\Temp\.arduinoIDE-unsaved2023620-30356-1nrx2ou.4y9i\sketch_jul20a\sketch_jul20a.ino:1:0: c:\Users\����˧\Documents\Arduino\libraries\Ticker/Ticker.h:74:2: note: candidate: Ticker::Ticker(fptr, uint32_t, uint32_t, resolution_t) Ticker(fptr callback, uint32_t timer, uint32_t repeat = 0, resolution_t resolution = MICROS); ^~~~~~ c:\Users\����˧\Documents\Arduino\libraries\Ticker/Ticker.h:74:2: note: candidate expects 4 arguments, 0 provided c:\Users\����˧\Documents\Arduino\libraries\Ticker/Ticker.h:62:7: note: candidate: constexpr Ticker::Ticker(const Ticker&) class Ticker { ^~~~~~ c:\Users\����˧\Documents\Arduino\libraries\Ticker/Ticker.h:62:7: note: candidate expects 1 argument, 0 provided C:\Users\闫秋帅\AppData\Local\Temp\.arduinoIDE-unsaved2023620-30356-1nrx2ou.4y9i\sketch_jul20a\sketch_jul20a.ino: In function 'void setup()': C:\Users\闫秋帅\AppData\Local\Temp\.arduinoIDE-unsaved2023620-30356-1nrx2ou.4y9i\sketch_jul20a\sketch_jul20a.ino:34:5: error: 'class Ticker' has no member named 'attach_ms' exit status 1 Compilation error: no matching function for call to 'Ticker::Ticker()'
这个错误提示表明在你的代码中存在以下问题:
1. 没有为 `Ticker` 对象提供必要的参数。根据错误信息,`Ticker` 类期望在创建对象时提供 4 个参数:回调函数、计时器时间、重复次数和分辨率。你需要为 `Ticker` 对象提供这些参数。
2. 在 `setup()` 函数中,你使用了 `attach_ms()` 方法,但是错误信息显示 `Ticker` 类没有名为 `attach_ms()` 的成员函数。可能是因为你使用的是旧版本的 `Ticker` 库,该库不支持 `attach_ms()` 方法。你可以尝试使用其他方法或查看库的文档以获取正确的方法。
解决这些问题的方法如下:
1. 在创建 `Ticker` 对象时,确保提供了所有必要的参数。例如:
```cpp
Ticker ticker(callback_function, timer_duration, repeat_count, resolution);
```
其中,`callback_function` 是你要执行的回调函数,`timer_duration` 是计时器时间,`repeat_count` 是重复次数,`resolution` 是分辨率。
2. 如果你使用的是旧版本的 `Ticker` 库,并且它不支持 `attach_ms()` 方法,那么你可以尝试使用其他方法,如 `attach()` 或查看库的文档以了解可用的方法和参数。
希望这些解决方案可以帮助你解决问题。如果还有其他问题,请随时提问。
阅读全文