gpt4 book ai didi

c++ - 使用运算符重载时,难以在命名空间内分离类的 header /源

转载 作者:行者123 更新时间:2023-12-03 07:52:26 26 4
gpt4 key购买 nike

我在 header /源之间分离类似乎有效,直到我尝试在命名空间中使用类的声明。我相信这与指定命名空间内运算符的范围有关,但我不知道以这种方式正确重载运算符的语法。

NameTest.h

#pragma once

#include <iostream>

namespace testspace
{
class Test
{
private:
int number{};

public:
friend std::ostream& operator<< (std::ostream& out, const Test& test);
};
}

NameTest.cpp

#include "NameTest.h"

using namespace testspace;

std::ostream& operator<< (std::ostream& out, const Test& test)
{
out << test.number;
return out;
}

我知道它在标题中是这样解析的...

(std::ostream &testspace::operator<< (std::ostream &out, const testspace::Test& test);

...我认为这与范围解析有关,但我不知道这是否是我实现命名空间、运算符或类本身的方式的问题。至少我确实知道,当我从命名空间中删除类声明时,它可以正常工作。它与 .cpp 内的范围解析有关吗?我该如何实现呢?

提前致谢。

编辑: test.number 在运算符重载的定义中无法访问......

最佳答案

当你说using namespace testspace;时在源文件中,它只是从命名空间导入名称以进行名称查找。如果您想将内容添加到命名空间,例如您的 operator<< ,那么你需要打开命名空间

namespace testspace {

然后添加操作符的实现,然后再次关闭命名空间

}

您可以根据需要多次打开命名空间以进行添加,跨多个文件或在同一文件内。这都是累加的。

关于c++ - 使用运算符重载时,难以在命名空间内分离类的 header /源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76847253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com