C++中的朋友有问题
Trouble with friend in C++
啊,yes"friend"是最可怕的关键词,不太面向对象,也不太程序化。好吧,它又惹麻烦了,我有我能想到的所有可能的警告,GCC能告诉我的只是readpoly()没有在这个范围(main.cpp)中声明。有人能帮我找出我做错了什么吗?我尝试过在readpoly中重新排列代码,但这没有帮助,似乎也没有其他函数原型可以改变这种行为。我只知道当我弄清楚它是什么的时候,我会打自己的。
//main.cpp
#include "Polynomial.h"
int main()
{
Polynomial test = readPoly();
}
//Polynomial.h
class Polynomial
{
public :
/** creates the zero Polynomial and sets the default output character*/
Polynomial();
/** creates the constant Polynomial c */
Polynomial( int c );
/** creates a Polynomial with one term c*x^d */
Polynomial(int c, int d);
Polynomial(const Polynomial& toCopy);
friend const Polynomial readPoly();
void insert(Term* term);
}
//Polynomial.cpp
const Polynomial readPoly()
{
cout << "How many terms? ";
int termQty = 0;
cin >> termQty;
int coefficient,degree;
Polynomial newPoly;
for (int n = 0; n <= termQty; n++)
{
cin >> coefficient >> degree;
newPoly.insert(new Term(coefficient,degree));
newPoly.degreeCached = max(degree, newPoly.degreeCached);
}
return newPoly;
}
友元声明声明函数存在于封闭命名空间范围,但它只使声明可见在班级内或通过ADL。由于函数没有任何使用Polynomial
的参数,ADL都找不到。只需添加函数在周围命名空间范围中的声明。或者制作它是一个静态成员,而不是friend
—在这种情况下,似乎更合适(至少对我来说)。在这种情况下,你会称之为使用Polynomial::readPoly()
(或仅使用Polynomial::read()
,因为范围决议明确说明了我们正在阅读的内容)。如此静态成员可能是工厂最常见的实现函数成语。
看起来您在使用readPoly()
之前没有声明它。您可以重新排列源(更多),使其显示在main()
之上,或者更好地在使用前声明它:
//Polynomial.h
class Polynomial
{
....
};
extern const Polynomial readPoly();
readPoly确实没有在这个范围内声明。在标头中添加函数声明。friend子句只告诉此函数可以访问私有成员,但它不声明函数本身。因此,总的来说,函数实际上并没有被声明。
相关文章:
- 我似乎对if/else的基本语句有问题:/
- 我在范围内未声明的错误类有问题
- 我的C++语言蛮力算法有问题
- 我关于函数"Assert"的C++代码有问题
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++类中的友元函数有问题?
- 我对数组即 0x6dfe78 有问题
- 我对 std::unique(算法)C++有问题
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 这个模板为什么有问题?如何正确编译
- 我对 MyGraph 属性顶点名称和边权重有问题
- delete[]有问题,如何部分删除内存
- 在C++中使用exit()退出程序有问题吗
- 跳转到if(false)块有问题吗
- 查找有问题的宏
- 使用 rand() 和 srand() 有问题
- C++ 回文程序总是给出 0(假)作为输出问题;我的代码哪里有问题?
- 我在 C++ "out_of_range at memory location"有问题
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- C++中的朋友有问题