我正试图用一个对传递的整数值有约束的模板类来构建一个库:
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
关键字。