当正文写入不同的 .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
中的声明和友元关键字无关紧要)。
我尝试过的:
我创建了其他 classes,并使用旧版本的 C++,我仍然得到相同的结果(在与 main
相同的文件中定义工作正常,但是如果写在另一个文件中它不起作用)。我可以接受将它写在同一个文件中,但是面向编程的目的是什么?
使用extern
关键字会有所帮助,但我的编译器不喜欢它,而且每次我都必须在main
中写它也很不方便。
您的 main.cpp
.
中未声明用户定义的文字函数
地点
test operator "" _t(const long double a);
在你的test.h
我在自己的 .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
中的声明和友元关键字无关紧要)。
我尝试过的:
我创建了其他 classes,并使用旧版本的 C++,我仍然得到相同的结果(在与
main
相同的文件中定义工作正常,但是如果写在另一个文件中它不起作用)。我可以接受将它写在同一个文件中,但是面向编程的目的是什么?使用
extern
关键字会有所帮助,但我的编译器不喜欢它,而且每次我都必须在main
中写它也很不方便。
您的 main.cpp
.
地点
test operator "" _t(const long double a);
在你的test.h