2016-10-10 69 views
-1

我試圖讓我的頭繞着指針,所以我一直在閱讀和嘗試的東西。 目前我正試圖將成員函數放在類之外,但能夠從主函數內部訪問一個私有變量。從我讀過的內容來看,這是無法完成的,除非我在課堂上有指針。 所以我試着把一個函數返回一個指向我的私有變量的類,在類之外的所有其他成員函數。 但是,當我嘗試讀取私有變量我碰到編譯問題。試圖使用指針訪問類外部的私有變量,具有類外部的成員函數

我試過閱讀其他文章並嘗試他們的解決方案,但我只是越來越困惑。 理想情況下,我希望有一個名爲「area」的成員函數,它傳遞一個指向私有變量「radius」的指針並返回該區域。

這是我目前有:

#include <iostream> 
#define PI 3.14159; 
using namespace std; 

class Circle{ 
private: 
    float radius; 
protected: 
    float *radPtr = &radius; 
public: 
    float getRadiusPtr(){ 
     return *radPtr; 
    } 
    void getRadius(); 
    void showRadius(); 
}; 
void Circle::getRadius() { 
    cout << "Enter Radius: "<< endl; 
    cin >> radius; 
} 

void Circle::showRadius(){ 
     cout << "Radius: " << endl; 
    } 

float Circle::area(*radPtr){ 
    float ar; 
    float r = this.getRadiusPtr(); 
    ar = PI * r * r; 
} 


int main(){ 
    Circle c1; 
    c1.getRadius(); 
    c1.showRadius(); 
    cout << "Area: " << a << endl; 

    return 0; 
} 
+2

@Dam他試圖瞭解指針。告訴他不要使用指針並不能達到目的。 – Barmar

+0

我嘗試過使用ideone,它工作正常 但是,當我使用VisualStudio和g ++時,它給了我前面描述的錯誤。 –

+1

只需按照您的要求更新ideone.com/49nrHE指針,也可以使用pow()來清除它。 – Dam

回答

1

不能使用&radius一個成員函數外,因爲沒有具體的對象,其radius成員應該得到的地址。

此外,您的getRadiusPtr()函數甚至不返回指針。它只是返回radius的值。

嘗試:

float *getRadiusPtr() { 
    return &radius; 
} 

然後你可以使用它像:

int main() { 
    Circle c1; 
    c1.getRadius(); 
    c1.showRadius(); 
    float *r = c1.getRadiusPtr(); 
    float a = PI * *r * *r; 
    cout << "Area: " << a << endl; 
    return 0; 
} 

DEMO

+0

感謝您的回覆。 當我嘗試編譯時,我得到錯誤行 一元'*'的無效類型參數(有'浮動') float a = PI * * r * * r; –

+0

更新:我可以使用cout來打印r的值,但是當我嘗試在區域計算中使用它時,會出現編譯錯誤。 –

+0

什麼是錯誤信息? – Barmar

相關問題