2017-10-17 1 views
0

私はC++を学んでいますが、constを理解しようとしています。私はgetterと表示関数に値を変更したり、表示したりする時にconstを使っていました。私は、私はプログラムのこの部分までのconstですべての問題を持っていなかったいくつかのヘッダーと.CPPファイルを使用するプログラムに取り組んでいますC++ constヘッダファイルのプロトタイプで動作しません - 再宣言またはプロトタイプエラーなし

は:

プログラムのこの部分は、製品の情報を収集します。それは3つの表示オプションがあります。 3つのディスプレイはすべてconstに設定されており、エラーはありません。私はエラーを持っているように見えるとゲッターのほとんどはのconstれていない、他のゲッターとセッターを、持っている同じファイルで

float getShippingCost() const{return shippingCost;} 
float getTotalPrice() const{return totalPrice;} 

:私のヘッダファイルで

は、私はこれらの2つのプロトタイプを持っています。

私はメソッドを持って、私の.cppファイルで

float Product :: getShippingCost() { 
    insert code here, proven to work before I started working with 
    const and other files, the return as shown earlier is in the .h file, 
    the same is true for the next method.} 

float Product :: getTotalCost(){insert code here} 

私は.cppファイルにメソッドを設定した場合、私は再宣言エラーが発生します。私がconstを削除すると、.hエラーで見つからないプロトタイプが得られます。私は、.cppファイルへのリターンの移動を含め、私が考えることができるすべてを試しました。

誰かがこの機能の仕組みを説明できますか?私はこれを理解していると思ったが、今はちょっと混乱している。

私のコードは以下の通りです:

#include <iostream> 
#include <iomanip> 

using namespace std; 
class Wallet 
{ 
private: 
    float money; 
    float dollars; 
    float cents; 
public: 
    float getMoney() const {return money;} 
    void display()const; 
}; 

float Wallet::getMoney() const { money += dollars + cents; } 

void Wallet::display() const { cout << "You have $" << money << endl; } 
+0

申し訳ありません。申し訳ありません。私は、第2行から最後の段落の第1行に.cppファイルのメソッドをconstに設定することを意味します。 –

+2

実際のコードを投稿してください。たとえば、プロトタイプにボディがあるのはなぜですか? –

+3

あなたは[mcve]を共有できますか –

答えて

2

の説明からしてから、最小限の例がなければ、あなたのヘッダファイルでは、あなたが持っていると言う:

float getShippingCost() const{return shippingCost;} 

は宣言、そのAではないです宣言と実装。

float getShippingCost() const;

そして、あなたの.cppファイルにあなたが持っている言及宣言である。別の実装である

float Product:: getShippingCost() const{insert code here} 

。それはconstの問題ではなく、それは再宣言であると言うことです。これを修正するには、あなたのヘッダーのみを変更してください。

float getShippingCost() const; 
float getTotalPrice() const; 
+0

私もそれを試みて、同じエラーを受けました。私はまだどこかのコードの例を追加しようとしていますが、最初にもう一度試してみましょう。 –

+0

オリジナルの質問を編集してください。 –

+0

今回は実際にこの作業を行いました。私は何度もそれを試したので、なぜ私が何かを逃してしまったに違いないのか分かりません。ですから、私の質問は、プロトタイプや他の時代に戻れないことがあるのはなぜですか?私はコードを投稿しようとしていますが、エディタも私を許可しません。 –

0

これは私の理解があなたの質問であるから外れています。 Minimal, Complete, and Verifiable exampleを投稿すると、お手伝いしている商品を正確に把握することができます。もしconstキーワードとメンバ関数を宣言する場合

、そうのような宣言と定義の両方で使用する必要があります。

をヘッダ.Hで:

class Product { 
    float getTotalCost() const; 

    float m_cost; 
} 

のソースで。 CPP:

Product::getTotalCost() const // <- remember to add the keyword in both 
{ 
    return m_cost; 
} 

だけはさておきとして、あなたが金融のための浮動小数点数を使用しないでください!固定小数点の10進数のクラスまたは整数と除算のどちらかを使用します。

+0

Cinder、そのチップをありがとう。なぜそれが悪いことを説明したり、それについて良い記事を教えてください。 –

+0

浮動小数点数は、私たちがお金のために使用する基本倍数10を正確に表すことはできません。浮動小数点と倍精度の問題は、大部分のお金のような数字が2のべき乗の整数倍の正確な表現を持っていないことです。実際、IEEE-754バイナリ浮動小数点数として正確に表現できる0/100と100/100の間の100の唯一の端数は整数であり、 0.25,0.5,0.75および1である。他の全ては少量消失する。 –

+0

浮動小数点数の働きは、符号のビット、ベースの指数を格納するビット、およびその上昇ベースの倍数の残りのビットを使用します。これは10.25のような数字が1025 * 10-2に似た形で表されることにつながります。ただし、基数が10でなく、浮動小数点数が2であるため、164 * 2-4となります。 –

関連する問題