2

C++では、私は持っています:

//Base1.h
#ifndef BASE1_H
#define BASE1_H
#include <iostream>
#include <string>
#include "Base2.h"

using namespace std;

class Base1{
    private:
        string name;
    public:
        Base1(string _name);
        void printSomething();
        string getName();
};
#endif

Base1.cpp私はコンストラクターを実装しBase1(string _name)string getName()通常どおり、次のようにしprintSomething()ます。

void Base1::printSomething(){
    Base2 b2;
    // how to pass a parameter in the following code?
    b2.printBase1();
}

// This is Base2.h
#ifndef BASE2_H
#define BASE2_H

#include <iostream>
#include <string>
#include "Base1.h"

using namespace std;

class Base2{
    public:
      Base2();
      void printBase1(Base1 b);
};
#endif

そしてBase2()コンストラクター私はいつものように実装します、これは私のものprintBase1(Base1 b)です:

void Base2::printBase1(Base1 b){
    cout << b.getName();
}

結局、クラスで使用printSomething()したいのですが、コードで上記のようにパラメーターをinBase1に渡す方法がわかりません。C++のようなものはありますか? そうでない場合は、提案をいただけますか?b2.printBase1()printSomething()b2.printBase1(this)

4

1 に答える 1

3

は C++ のポインターであるためthis、逆参照する必要があります。

b2.printBase1(*this);

循環インクルードがあることに注意してください。#include "Base2.h"から削除する必要がありますBase1.h。また、特に POD 以外の型の場合は、( ) 参照によるパラメーターの受け渡しも調べてくださいconst。そうしないと、予期した動作が得られない可能性があります。

たとえば、あなたの署名は

void printBase1(Base1 b);

それを呼び出すと、関数内にパラメーターのコピーが作成されるため、コピーに対して操作を行います。これを次のように変更する必要があります。

void printBase1(Base1& b);

また

void printBase1(const Base1& b); //if you don't change b

確実にコピーが必要な場合にのみ、値で渡します。

于 2012-06-12T16:18:16.127 に答える