2017-08-10 22 views
0

私はその共通のLNK2019エラーがあり、何が間違っているのか理解できません。ここでLNK2019この場合の解決方法は?すべてが正しいと思われる

は私のソリューションエクスプローラである:ここで

enter image description here

は私Rectangle.cpp次のとおりです。ここで

class Rectangle 
{ 
    public: 
     int getArea() 
     { 
      return this->width*this->height; 
     } 
     int width; 
     int height; 
}; 

は私Rectangle.h次のとおりです。ここで

#pragma once 
class Rectangle 
{ 
    public: 
     int getArea(); 
     int width; 
     int height; 
}; 

は私Functions.cpp次のとおりです。

#include <iostream> 
#include "Rectangle.h"; 

using namespace std; 

int main() 
{ 
    Rectangle r3{ 2, 3 }; 
    cout << r3.getArea(); 

    return 0; 
} 

私はC++にとって非常に新しく、正しく処理したようですが、まだエラーが発生しています。

+1

なぜ、あなたはcppファイルで 'Rectangle'クラスを再定義していますか?これを見てください:https://stackoverflow.com/questions/9579930/separating-class-code-into-a-header-and-cpp-file – NathanOliver

+0

彼は何のクラスですか? – ohidano

+0

@hidano彼はクラスを意味します。私の答えを見てください! =) – gsamaras

答えて

2

Rectangle.cppは次のようにする必要があります:あなたはすでに、ヘッダーファイルでそれを持っているので

#include "Rectangle.h" 

int Rectangle::getArea() { 
    return this->width*this->height; 
} 

あなたは、ソースファイル内のクラス定義を再定義するべきではありません!

+0

そして今、私はLNK1120と同じ2019を取得しています。 – ohidano

+0

@ohidanoはどういう意味ですか? 'main()'のようにヘッダーをソースファイルに含めましたか? – gsamaras

+0

私はこの問題を解決しました。 '.h'ファイルに' ** class ** 'という言葉を一度使用しなければならないようで、クラス実装を書くときには、メンバーフィールドはまったく言及していません。私はそれを正しく得たか? – ohidano

2

あなたはクラスの関数の本体を書きたいときに、あなたはそれをこのように記述する必要があります。

#include "Rectangle.h" 
int Rectangle::getArea() 
{ 
    return this->width*this->height; 
} 

あなたはcppのファイルにクラスを再定義する必要はありません。 ヘッダー(.h、.hpp)の中にすべてを定義し、それをcppファイル(#include "Rectangle.h")の中に組み込みますが、ヘッダーファイルのすべてを再宣言してはいけません。

ちなみに、メソッドを記述しているので、メンバー変数には直接widthでアクセスできます。this->widthを使用する必要はありません。

しかし、独自のクラスを作成する際には、規約を使用することをお勧めします。 私の規約では、メンバ変数の先頭にmを付けます。 (あなたの場合はmWidthまたはmHeightとなります)。

m_variableまたはvariable_のような他の規則がある人がいます。

+0

したがって、 '.cpp'クラスファイルでは、メソッドの実装だけが行かなければなりません、そうですか? – ohidano

+0

@ohidanoはい、そうですよ!アントワーヌ、素敵な答え! :) – gsamaras

+0

それはあなたが必要なものによって異なります。しかし、私はそのように処理すると言います。 1クラス= 2ファイル:あなたのような1つのヘッダー(計画の一種です)と* .cpp内の構造。その後、それはあなたが必要なものに依存します。しかし、あなたがC++を始めているので、私は両方とも言ったように助言することができます: header = classとメソッドのプロトタイプ。 cpp = implementation –

関連する問題