2010-04-10 64 views
2

我在這裏做錯了什麼?我一直得到一個編譯錯誤,當我嘗試在代碼實驗室(turings工藝)運行此類頭+實現

說明:

寫的實現(.cpp文件)的GasTank類上一個練習的。該類的完整規範是: 一個名爲double類型的數據成員。 一個沒有參數的構造函數。構造函數將數據成員量初始化爲0. 一個名爲addGas的函數,它接受double類型的參數。金額實例變量的值由參數的值增加。 一個名爲useGas的函數,它接受double類型的參數。金額數據成員的值減少了參數的值。 一個名爲getGasLevel的函數,它不接受任何參數。 getGasLevel返回金額數據成員的值。

class GasTank{ 
double amount; 
GasTank(); 
void addGas(double); 
void useGas(double); 
double getGasLevel();}; 

GasTank::GasTank(){ 
amount=0;} 
double GasTank::addGas(double a){ 
amount+=a;} 
double GasTank::useGas(double a){ 
amount+=a;} 
double GasTank::getGasLevel(){ 
return amount;} 
+4

兩個'useGas'和'addGas'增加'amount' ...可能不是你的意圖... – 2010-04-10 01:22:39

回答

1

您列出類的聲明,其功能的實現兩者。頭文件中的代碼部分是什麼,它的哪部分是在實現文件中?

此外,回想一下class的默認可見度爲private。因此,所有的函數都是私有的 - 包括構造函數! - 所以你不能實例化類的一個對象。嘗試將相關功能的可見性更改爲public

確保類聲明中的函數簽名和類定義匹配。所以,如果你申報

class GasTank { 
    // ... 
public: 
    void addGas(double); 
    // ... 
}; 

確保你定義

void GasTank::addGas(double d) 
{ 
    // ... 
} 

,而不是

double GasTank::addGas(double d) 
{ 
    // ... 
} 

最後一件事:做正確縮進代碼。在閱讀你的代碼時,你的標記(和我們)會有一個很好的心情。

+0

我感到愚蠢。謝謝。 – codefail 2010-04-10 01:29:54

1

的訪問模式class是默認private。你需要至少你的構造公衆和可能的成員函數public

class GasTank 
{ 
    double amount; 
public: 
    GasTank(); 
    // ...  
}; 

的返回類型的定義也不一致的聲明。

2

聲明的返回值必須與您的定義的返回值相匹配。

所以,你想:

class GasTank 
{ 
public://<--- To use your GasTank you'll have to make the members public 
    GasTank();//<-- Especially the contructor 
    void addGas(double); 
    void useGas(double); 
    double getGasLevel(); 

private: 
    double amount; 
}; 

GasTank::GasTank() 
{//<--- read up on initializer lists so you can initialize amount here 
    amount=0; 
} 
void GasTank::addGas(double a) //<-- Return type fixed here 
{ 
    amount+=a; 
} 
void GasTank::useGas(double a) //<-- Return type fixed here 
{ 
    amount+=a;//<--- See something wrong here? 
} 
double GasTank::getGasLevel() 
{ 
    return amount; 
} 
0

有幾件事情錯在這裏:

  1. 您聲明useGas和addGas爲返回「無效」,但在定義你說它返回「雙」。
  2. 如果你打算返回'雙',你不「返回」任何東西。
  3. 您需要爲您的方法訪問使用「public:」關鍵字,否則它默認爲「private」:
  4. addGas和useGas都是遞增量。
0

要完全準確,這將是正確的代碼按說明書

class GasTank 
    { 
    public: 

    GasTank() 
    {amount=0;} 
    void addGas(double); 

    void useGas(double b) 
     {amount-=b;} 
    double getGasLevel() 
     {return amount;} 
    private: 
    double amount; 


    }; 

    void GasTank::addGas(double a) 
    {amount+=a;}