2011-02-10 64 views
1

爲什麼我不能這樣做? 編譯器說爲什麼我不能這樣做(錯誤C2275:'A':這種類型的非法使用作爲表達式)

警告C4832:令牌'。'是非法 UDT後「A:看的聲明 'A' 錯誤C2275: 'A':非法使用這個 類型作爲表達式的:見 聲明的 'A'

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`的實例上調用它。 – 2011-02-10 09:08:12

回答

6

您只能在對象上調用非static成員函數。

E.g.

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,你可以調用該函數沒有對象,但語法使用::,不.

E.g.

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

有了這樣getStringFromA函數名,不過,我希望通過特定A,我想從字符串,可能是通過引用傳遞A的參數。

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

如果getStringA實際上並沒有修改A對象倒不如聲明函數const,以便它可以對Aconst實例調用。在這種情況下,可以使用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.getString();

+0

..比我更快秒..需要更強的咖啡...我會刪除我的答案.. :) – Nim 2011-02-10 09:08:44

2

由於A::getString()是不是你需要調用它的實例A的靜態方法。

相關問題