0

class Aclass Bという2 つのクラスを定義しました。それらは完全に独立しています。

のインスタンスとして、およびのインスタンスとして作成cします。次に、操作を実行する の本体を定義します。class Bdclass AfunctionOfAc

class A {
public:
    functionOfA();
}

class B {
    ...
}

A::functionOFA()
{
    c.functionOfB();
}

main()
{
    A d;
    B c;
    d.functionOfA();
}

しかし、コンパイラは私に次のエラーを与えます: cはこのスコープで宣言されていません

4

5 に答える 5

2

A::functionOfA()定義はインスタンスが何であるかを知る必要があります。インスタンスcに渡すことができBます:

class B;

class A
{
public:
    functionOfA(const B& b) const;
};

A::functionOFA(const B& b) const
{
    b.functionOfB();
}

A a;
B b;
a.functionOfA(b); // pass in B instance
于 2013-09-15T05:39:50.043 に答える
0
A::functionOFA()
{
    c.functionOfB();  //You cannot do this unless c is global
}

ただし、あなたの場合はmain

使用する:

 B c;
void A::functionOfA()
{
    c.functionOfB();
}

また

Bのオブジェクトを引数として渡すfunctionOfA(const B& c)

于 2013-09-15T05:37:54.490 に答える
0

あるメソッドが別のメソッドを呼び出すと、それらが完全に独立していることがわかりません。cただし、引数として渡すことができます。

class B
{public:
    functionOfB();
}

class A
{public:
    functionOfA(B /*or B& or const B&, learn about references*/ c);
    .....;
}



A::functionOFA(B c)
{
    c.functionOfB();
}

B::functionOfB()
{
  .....
}

main()
{
    A d;
    B c;
    d.functionOfA(c);
}
于 2013-09-15T05:39:10.157 に答える
0

このエラーが発生する理由は、クラス A のどのオブジェクトからも c にアクセスできないためです。これを変更するには、A に型 B のデータメンバーを与えてそれを使用するか、オブジェクトを渡すことができます。タイプ B から A の関数へ。

class A {
public:
    B objB;
    functionOfA();
}

class B {
    ...
}

A::functionOFA()
{
    objB.functionOfB();
}

main()
{
    A d;
    B c;
    d.objB = c;
    d.functionOfA();
}

または (それらを独立させておく)

class A {
public:
    functionOfA(B& objB);
}

class B {
    ...
}

A::functionOFA(B& objB)
{
    objB.functionOfB();
}

main()
{
    A d;
    B c;
    d.functionOfA(c);
}

依存性注入をチェックしてください。その手法を使用すると、最初のシナリオで A を B のタイプから独立させることができると思います。

于 2013-09-15T14:54:12.880 に答える