当正文写入不同的 .cpp 文件时,用户定义的文字不起作用

User-defined literal doesn't work when the body is written in a different .cpp file

我在自己的 .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([=60=之外)写相同的代码(肯定是一样的,因为我复制了它,并且还做了一些单词比较) ] 范围)文件,它工作正常,为什么?

我正在使用 Visual Studio 2019 和 C++20 (GitHub Files)。

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
}

是的,我知道这是因为它没有 class 参数,这使得它在 class 内部。我想问一下如何在 .cpp 文件中声明它,但仍然可以从 main 访问(.h 中的声明和友元关键字无关紧要)。

我尝试过的:

您的 main.cpp.

中未声明用户定义的文字函数

地点

test operator "" _t(const long double a);

在你的test.h