2011-02-10 6 views
1

なぜ私はこれを行うことができませんか? コンパイラは言う。なぜ私はこれを行うことができません(エラーC2275: 'A':この型を式として不正に使用する)

警告C4832:トークン '。' UDT後違法 ある「の宣言を参照してください ':A A' エラーC2275 ':式としてこの タイプの不正使用を:の 宣言参照 ''

class A{ 
public: 
    std::string getString(){return "olalal";} 
}; 

class B{ 
public: 
    std::string getStringFromA() {return A.getString();} 
}; 


int main() 
{ 
    B b; 
    cout << b.getStringFromA(); 
    return 0; 
} 
+2

'getString'は静的関数ではありません。あなたは 'A'のインスタンス上でそれを呼び出さなければなりません。 –

答えて

6

オブジェクトに対しては、staticメンバー関数以外はコールできません。

など。

std::string B::getStringFromA() 
{ 
    A object_of_type_A; 
    return object_of_type_A.getString(); 
} 

また、あなたは、例えば、無名の一時的なAを作成し、その上getString()を呼び出すことができます

class B { 
public: 
    std::string getStringFromA() { return A().getString(); } 
}; 

getString()Astatic宣言された場合は、オブジェクトなしで関数を呼び出すことができますが、構文が::、ない.を使用しています。

など。 getStringFromAのような関数名を持つ

std::string B::getStringFromA() 
{ 
    return A::getString(); 
} 

、しかし、私は多分、参照によってAを渡し、から文字列を取得したい特定のAのパラメータを渡すことを期待します。 A

class B { 
public: 
    std::string getStringFromA(A& a) { return a.getString(); } 
}; 

getStringの場合は、実際にAconstインスタンス上で呼び出すことができるように機能constを宣言する方が良いだろうAオブジェクトを変更しません。この場合、参照番号constを使用することができる。

class A { 
public: 
    std::string getString() const { return "olalal"; } 
}; 

class B { 
public: 
    std::string getStringFromA(const A& a) { return a.getString(); } 
}; 
4

getString()でありますないa スタティックメンバー関数; Aという特定のインスタンスで呼び出す必要があります。 A a; a.getString();

+0

..秒で私を鼓舞..強いコーヒーが必要...私は私の答えを削除します:) – Nim

2

A::getString()は、Aのインスタンスで呼び出す必要があるため、静的メソッドではありません。

関連する問題