我在自己的.cpp
文件中创建了一个用户定义的文字(在.h
文件中声明为friend
函数):
fraction operator"" _frac(const long double val)
{
return fraction(static_cast<float>(val));
}
但是在main
中,它产生了这个错误:
Error (active)E2486 user-defined literal operator not found
但是,当我在main
或.h
(类作用域之外)文件中编写相同的代码(绝对相同,因为我复制它,并且还做一些单词比较)时,它工作得很好,为什么?
我正在使用Visual Studio 2019和c++ 20 (GitHub文件)。
Test.h
:
#pragma once
class test
{
double x;
public:
explicit test(const double a) : x(a) {};
friend test operator "" _t(long double a);
};
Test.cpp
:
#include "Test.h"
test operator "" _t(const long double a)
{
return test(a);
}
main
:
#include "Test.h"
int main()
{
test t = 12_t; //error
}
是的,我知道这是因为它没有一个参数,这个参数是一个类,这使得它是类的内部。我想问如何在.cpp
文件中声明这一点,但仍然可以从main
访问(.h
中的声明和朋友关键字无关紧要)。
我试过了:
我创建了其他类,并使用旧版本的c++,我仍然得到相同的结果(在同一文件中的定义作为
main
工作得很好,但如果写在另一个文件中它不起作用)。我可以接受将它写在同一个文件中,但是面向对象编程的目的是什么呢?使用
extern
关键字可以帮助,但是我的编译器不喜欢它,而且每次我必须在main
中编写它也非常不方便。
用户定义的文字函数只是没有在您的main.cpp
中声明。
地方
test operator "" _t(const long double a);
在你的test.h