头文件
#ifndef deneme_h
#define deneme_h
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std ;
class A
{
public:
Course ( int code ) ;
int getACode () ;
private:
int code ;
};
class B
{
public:
B ( A * a = NULL) ;
A * getA () ;
private:
A * a ;
friend ostream & operator<< ( ostream & out , B & b ) ;
};
#endif
A.cpp
#include "deneme.h"
using namespace std ;
A :: A ( int code )
{
this -> code = code;
}
int A :: getACode()
{
return this -> code;
}
B.cpp
#include "deneme.h"
using namespace std ;
B::B ( A * a )
{
this -> a = new A(223);
this -> a = a;
}
A * A::getA () { return this -> a;}
ostream & operator<< ( ostream & out , B & b ) { out << b.course->getACode();}
和main.cpp
#include "deneme.h"
using namespace std;
int main(){
Course* c1 = new Course(223) ;
Offering* o1_1 = new Offering(c1);
cout<< *o1_1;
return 0;
}
大家好
我想问一下这段代码。上面的代码工作正常,它打印223.但是当我更改B.cpp中的运算符重载部分
ostream & operator<< ( ostream & out , Offering & offering ) { out << offering.(getCourse() )->getCourseCode();}
我收到错误。为什么会出错?我不能使用返回值。谢谢你的回答。
答案 0 :(得分:2)
如前所述,你需要退出,我想你想要的是:
ostream & operator<< ( ostream & out , Offering & offering ) { out << ( offering.getCourse() )->getCourseCode(); return out; }
(我移动了一个括号)
答案 1 :(得分:1)
删除getCourse()
周围的括号答案 2 :(得分:0)
与iostream一起使用时:
operator<<
应该通过const引用获取其第二个参数(如果这是微不足道的话,则为值)。
它应该返回它的第一个参数。
所以
ostream & operator<< ( ostream & out , const B & b )
{
return out << b.course->getACode();
}
ostream & operator<< ( ostream & out , const Offering & offering )
{
return out << offering.getCourse()->getCourseCode();
}
在这两种情况下,您也可以将return out
作为单独的语句放在另一个语句之后。
另请注意,在C ++中,您不必使用new创建所有对象。