-3

ヘッダーファイル

#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();}

エラーが発生します。なぜエラーが発生するのですか?戻り値を使用できません。回答ありがとうございます。

4

3 に答える 3

2

すでに述べたように、戻る必要があります。必要な行は次のとおりです。

ostream & operator<< ( ostream & out , Offering & offering ) { out << ( offering.getCourse() )->getCourseCode(); return out; }

(括弧を移動しました)

于 2012-10-19T09:22:36.323 に答える
1

getCourse() を囲む括弧を削除します

于 2012-10-19T09:26:01.447 に答える
0

iostream で使用する場合:

operator<<const 参照 (またはそれが些細な場合は値) によって 2 番目のパラメーターを取得する必要があります。

最初のパラメーターを返す必要があります。

それで

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 で作成する必要がないことにも注意してください。

于 2012-10-19T09:22:55.480 に答える