C++沉思录里一个关于friend ostream& operator<<……报错
#pragma once
#include <iostream>
using namespace std;
class component
{
friend ostream& operator<< (ostream&, const A&);
friend class A;
void print() const
{
cout<<"component";
}
};
class A
{
friend ostream& operator<< (ostream&, const A&);
int a;
component c;
public:
A() : a(123)
{}
};
ostream& operator<< (ostream& o, const A& a)
{
a.c.print();
o<<a.a<<endl;
return o;
}
我把代码简化成这样了
Component类的
friend ostream& operator<< (ostream&, const A&);
这句报:error C4430 missing type specifier - int assumed. Note: C++ does not support default-int
作者有意,把A类和Component类都设置为私有类,只允许operator<<设置成友元的来访问这两个类里的东西。如果不加报错的这句,operator<<函数里就不能调用a.c.print(),因为没有访问权限。但加了,又报这个错。
网上有好多C++沉思录例子的实现
例子
他们的做法都是绕开了这条,把Component的print设置成公有函数。这样就不用friend operator<<了。
但我想知道,作者写书这么多年,就没人发现这个?而且书出版了好几版了,没有勘误这个?
还是说有解决的办法?或者我用的编译器错了,本来C++标准是允许这样的?
[解决办法]
没有定义A类,component中你用到了A,编译器如何认得 在component前申明class A;
[解决办法]
有一点跟楼主不同就是,A应该前置声明