2017-09-13 11 views
-1

私は、三角形の三角形の底と高さを読み取り、その領域を報告するプログラムに取り組んでいます。それは私を与える三角形の面積を計算する際にエラーが発生しましたか?

#include<iostream> 
using namespace std; 

// a simple triangle class with a base and a height 

class Triangle { 

public:  
    double setbase(double x) { //was void but changed it to double 
     base = x; 
    }  
    double setheight(double y) { 
     height = y; 
    } 
    double getbase() { 
     return base; 
    } 
    double getheight() { 
     return height; 
    } 

private: 
    double base, height; 
};  


double area(double, double);  

int main() {  

    Triangle isoscoles1; 
    isoscoles1.setbase; 
    isoscoles1.setheight; 


    cin >> isoscoles1.setheight; 
    cin >> isoscoles1.setbase; 
    double x = isoscoles1.getbase; 
    double y = isoscoles1.getheight; 

    cout << "Triangle Area=" << area(x,y) << endl; 
    system("pause>nul"); 
} 


double area(double x, double y) { 
    double a; 
    a = (x*y)/2;  

    return a; 
} 

これは、エラーは次のとおりです:ここでは私がこれまで持っているものだ -

Severity Code Description Project File Line Suppression State 
Error C3867 'Triangle::setbase': non-standard syntax; use '&' to create a pointer to member Project1 c:\users\ku\desktop\test\project1\main.cpp 50 
Error C3867 'Triangle::setheight': non-standard syntax; use '&' to create a pointer to member Project1 c:\users\ku\desktop\test\project1\main.cpp 51 
Error C2679 binary '>>': no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion) Project1 c:\users\ku\desktop\test\project1\main.cpp 54 
Error C2679 binary '>>': no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion) Project1 c:\users\ku\desktop\test\project1\main.cpp 55 
Error C3867 'Triangle::getbase': non-standard syntax; use '&' to create a pointer to member Project1 c:\users\ku\desktop\test\project1\main.cpp 56 
Error C3867 'Triangle::getheight': non-standard syntax; use '&' to create a pointer to member Project1 c:\users\ku\desktop\test\project1\main.cpp 57 

は、私がここで間違って何をしているのですか?

+3

https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list([良い本]から学ぶ考えてみましょう)、むしろランダムにコードしようとするより。 –

+0

あまり役に立ちません。訪問してくれてありがとう – LogomonicLearning

+0

なぜそれは役に立ちませんか?あなたが作った間違いは、それらについての構文は、どんな良い本の最初の章でもカバーされるはずです。 1つを読むことを提案することによって、私はあなたが将来同じような問題の多くを作るのを妨げる可能性があります。 –

答えて

3

問題は、これらの行にあります。

cin >> isoscoles1.setheight; 
cin >> isoscoles1.setbase; 

setheightsetbaseはメンバ関数ではなく、実際の変数であることを忘れないでください。

double value; 
cin >> value; 
doSomething(value); 

これは、関数の呼び出しから値を読み取る分離する:上記の場合

void doSomething(double arg) { 
    ... 
} 

cin >> doSomething; // Error - can't read into a function! 

、あなたは本当にこのような何かをしたい:これは、このような何かを書くようなものです。

これに基づいて、自分の問題を解決するために類似のソリューションをどのように使用するかを考えることができるかどうかを確認してください。


コメントにも指摘されているように、ここには別の問題があります。これらの行を見てみましょう:

isoscoles1.setbase; 
isoscoles1.setheight; 

は戻って私たちのdoSomething機能だと思います。通常、このようなコード行がありますか?

doSomething; 

これらの2行は安全に削除できます。彼らは実際に何もしないし、あなたが見ているエラーのいくつかを引き起こしています。

+0

エラーは、_attempted_関数 'getbase' /' getheight'呼び出しの括弧に欠けています。 –

+0

@AlgirdasPreidžius良いキャッチ。回答が更新されました! – templatetypedef

+0

ありがとう、それはいくつかを明確にしました。下のコードは完全に動作します – LogomonicLearning

0

これは完全に機能します。

class Triangle {public: void setbase(double x) { //was void but changed it to double base = x; }

void setheight(double y) { 
    height = y; 
} 
double getbase() { 
    return base; 
} 
double getheight() { 
    return height; 
} 

private: double base; double height; };

double area(double, double);

int main() {

Triangle isoscoles1; 
double x; 
double y; 
cin >> x >> y; 

isoscoles1.setheight(y); 
isoscoles1.setbase(x); 
double b = isoscoles1.getbase(); 
double h = isoscoles1.getheight(); 

cout << "Triangle Area=" << area(x,y) << endl; 
system("pause>nul"); 
return 0; 

}

double area(double x, double y) { double a; a = (x*y)/2;

return a; 

}

関連する問題