C++模板:需要构造函数、析构函数或类型转换



我正试图用一个对传递的整数值有约束的模板类来构建一个库:

library.h

template<int N>
requires (N == 1)
class example {
public:
    example();
};

library.cpp:

#include "library.h"

main.ccp:

#include "library.h"
int main() {
    return 0;
}

然而,当试图编译main.cpp时,编译器会向我抛出以下错误:

error: expected constructor, destructor, or type conversion before '(' token

我注意到,如果我不在main.ccp中包含library.h,则编译成功,但我的main.ccp中没有其他内容,我真的不确定发生了什么。

我感谢任何帮助解决这个问题,因为如果我不能编译,我就无法继续处理这个问题。

Charles Savoie已经在他的评论中写道,requires关键字是C++版本20以来的新关键字。

较老的编译器不知道该关键字;对于这样的编译器来说,CCD_ 5只是类似于CCD_ 6或CCD_。

您可以尝试用helloWorld替换requires,以检查编译器是否支持requires:

template<int N>
helloWorld (N == 1)
class example {
  public:
    example();
};

当然,在任何情况下,这都会导致一些错误消息。

但是,如果您得到的错误消息与您现在得到的完全相同,则很可能您的编译器不支持requires关键字。

当然,您可以尝试使用更新的编译器。

但在这种情况下,您的库很可能只能由最新的编译器使用,因此在编写使用库的程序时,您也需要非常新的编译器。

如果希望库与较新的编译器兼容,则必须避免使用requires关键字。

相关内容

最新更新