首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++沉思录里一个关于friend ostream& operator<<报错解决方法

2013-03-25 
C++沉思录里一个关于friend ostream& operator……报错#pragma once#include iostreamusing namespace s

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;
[解决办法]
引用:
试了下,并没有报错,可能是编译器问题,我的是VS2008

有一点跟楼主不同就是,A应该前置声明

热点排行