C++ 用户定义的文字运算符为';我在班上没被认出来
我编写了一个类,它使用文字运算符来指示物理应用程序中使用的测量错误。我定义了一个literalC++ 用户定义的文字运算符为';我在班上没被认出来,c++,c++11,user-defined-literals,C++,C++11,User Defined Literals,我编写了一个类,它使用文字运算符来指示物理应用程序中使用的测量错误。我定义了一个literal“”\u err,它将长双精度作为参数,并返回一个名为Error的结构。例如,1.3\u err 此文本的friend声明放在头文件TStat.h中,定义放在TStat.cpp中,如下面的代码所示 但是,我在使用类似b=0.4_err的示例进行编译时出错,其中b是error。在错误中,它表示找不到文本运算符。您可以检查问题末尾的错误消息 我尝试了很多组合,比如定义内部或外部的文字等。我已经搜索了类似的问
“”\u err
,它将长双精度
作为参数,并返回一个名为Error
的结构。例如,1.3\u err
此文本的
friend
声明放在头文件TStat.h
中,定义放在TStat.cpp
中,如下面的代码所示
但是,我在使用类似b=0.4_err
的示例进行编译时出错,其中b
是error
。在错误中,它表示找不到文本运算符。您可以检查问题末尾的错误消息
我尝试了很多组合,比如定义内部或外部的文字等。我已经搜索了类似的问题,但是代码中的一切看起来都很好,就像很多教程和其他C++源描述的一样。 作为一名粒子物理学家,我使用一个由CERN开发的C/C++库,它实际上是一个C/C++解释器。在这里,我可以使用这个类而不会出现任何错误(我根本没有使用任何根类)。但是,当我使用
g++
和c++11
标志编译代码时,找不到与文本匹配的内容
这是头文件:
#ifdef TSTAT_H
#define TSTAT_H
namespace TStat {
struct Error {
// ...
}
class Double {
// constructors, etc.
// ...
friend Error operator "" _err (long double);
}
}
这是TStat.cpp文件:
#包括“TStat.h”
使用名称空间TStat;
// ...
TStat::错误运算符“”\u err(长双错误){
TStat::错误;
// ...
返回误差;
}
在终端中使用以下命令编译时(我使用的是MacOS)
我听到一个错误说
example.cpp:6:12: error: no matching literal operator for call to
'operator""_err' with argument of type 'long double' or
'const char *', and no matching literal operator template
b = 0.4_err;
对于类似这样的example.cpp:
#include "TStat.h"
using namespace TStat;
int main() {
Error b;
b = 0.4_err;
return 0;
}
friend
声明不会将声明的名称带入任何其他范围。在这种情况下,它甚至不将名称包含在类本身的范围内:
[class.friend]/7类中定义的友元函数位于定义它的类的(词法)范围内。类外定义的友元函数不是(6.4.1)
但这与所展示的案例无关main
在任何类中都不会看到任何friend
声明
最简单的修复方法是在任何类之外的顶层在
TStat.h
中声明operator”“\u err
。Afriend
声明不会将声明的名称带入任何其他范围。在这种情况下,它甚至不将名称包含在类本身的范围内:
[class.friend]/7类中定义的友元函数位于定义它的类的(词法)范围内。类外定义的友元函数不是(6.4.1)
但这与所展示的案例无关main
在任何类中都不会看到任何friend
声明
最简单的修复方法是在任何类之外的顶层声明
TStat.h
中的operator”“\u err
。没有行b=0.4\u err代码>在发布的代码中。请发布一个。我添加了example.cpp代码。谢谢没有行b=0.4_错误代码>在发布的代码中。请发布一个。我添加了example.cpp代码。谢谢哦,成功了!然而,当我试图定义以前工作的TStat::Double操作符+(Double,TStat::error)
时,这会产生另一个错误。这是相关的还是我应该开始一个新问题?@OktayDoğangün我认为一个新问题会更好。S:我已经解决了那个问题(因为一个愚蠢的错误)。哦,它成功了!然而,当我试图定义以前工作的TStat::Double操作符+(Double,TStat::error)
时,这会产生另一个错误。这是相关的还是我应该开始一个新问题?@OktayDoğangün我认为一个新问题会更好。S:我已经解决了这个问题(因为一个愚蠢的错误)。
#include "TStat.h"
using namespace TStat;
int main() {
Error b;
b = 0.4_err;
return 0;
}