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



我在自己的.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

相关内容

  • 没有找到相关文章

最新更新