gpt4 book ai didi

c++ - C++ 中的编译错误可能是命名空间问题

转载 作者:行者123 更新时间:2023-11-28 03:03:53 24 4
gpt4 key购买 nike

我认为我的问题非常根本,但我没有找到解决方案。我尝试了几种解决方法。我得到的错误是一长串“没有匹配的函数调用”。我很确定这与我使用 namespace 的方式有关,但在线查看似乎我正在正确格式化它。命名空间是分配的必要条件,因此我无法将其删除。

代码:

namespace complexSpc{
class complex
{
public:

friend complex operator*(complex &, complex &);
};
}

在程序的底部,我定义了我的类成员。它们不在命名空间 block 内。我试图这样做,但没有解决任何问题。我还尝试移动定义,以便在声明时定义它们。

    complexSpc::complex complexSpc :: operator*(complexSpc::complex & first, complexSpc::complex & second)
{
complexSpc::complex t1 = complexSpc::complex(first.real() * second.real(), first.imag() * second.imag());

return t1;
}

为此产生的错误是这样的:

complexFix.cpp:183: 错误:没有匹配函数来调用“complexSpc::complex::complex(complexSpc::complex)”

有人问我是否有复制构造函数。我愿意。它在命名空间中声明并定义如下:

complex(complex &);


complexSpc::complex::complex(complexSpc::complex & copy)
{
member1 = copy.real();
member2 = copy.imag();
return;
}

最佳答案

将复制构造函数的签名更改为:

complexSpc::complex::complex(const complexSpc::complex & copy);

允许在运算符定义的返回语句中复制 complex 的右值。

请注意,您的运算符(operator)签名也必须遵守这一原则,以便能够在组合操作中使用它们:

complexSpc::complex complexSpc :: operator*
( const complexSpc::complex & first
, const complexSpc::complex & second
);

很可能这应该可以解决您剩下的大部分错误。

关于c++ - C++ 中的编译错误可能是命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149379/

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