現在、大学でCをある程度学んだので、オブジェクト指向を学びたいと考え、C++をとあるサイト(後述)を参考にソースを書いている途中ですが、エラーが発生し、何故そうなったのかが判らず仕舞いとなっております。
terateilの使用はこれが初めてなので、分かり辛いところがあったらすみません。
###該当のソースコード
- cal.h
#ifndef CALC_H #define CALC_H class FundCalc{ private: double m_num1; double m_num2; public: FundCalc(); void setNum1(double num); void setNum2(double num); double getNum1(); double getNum2(); double add(); double sub(); }; //継承 class NewCalc : public FundCalc{ public: double mul(); double div(); };
- cal.cpp
#include "cal.h" FundCalc::FundCalc() : m_num1(0),m_num2(0){ } void FundCalc::setNum1(double num){ m_num1 = num; } void FundCalc::setNum2(double num){ m_num2 = num; } double FundCalc::getNum1(){ return m_num1; } double FundCalc::getNum2(){ return m_num2; } double FundCalc::add(){ return m_num1+m_num2; } double FundCalc::sub(){ return m_num1-m_num2; } double NewCalc::mul(){ return m_num1*m_num2; } double NewCalc::div(){ if(m_num2 == 0){ return 0;} return m_num1/m_num2; }
- prob2.cpp
#include<iostream> #include"cal.h" using namespace std; int main(){ NewCalc n; n.setNum1(40); n.setNum2(20); cout<<n.getNum1() << "+" <<n.getNum2() << "=" << n.add() << endl; cout<<n.getNum1() << "-" <<n.getNum2() << "=" << n.sub() << endl; cout<<n.getNum1() << "*" <<n.getNum2() << "=" << n.mul() << endl; cout<<n.getNum1() << "/" <<n.getNum2() << "=" << n.div() << endl; return 0; }
###補足情報(言語/FW/ツール等のバージョンなど)
- 言語 「C/C++」
- 参考サイト
http://cpp-lang.sevendays-study.com/problem6.html
問題2のところです
- 環境
ubuntu 16.04 (デュアルブート)
- コンパイル方法
g++を使用。versionは5.40
コマンド「g++ -o prob2 prob2.cpp cal.cpp」
###発生している問題・エラーメッセージ
FundCalcクラスの関数からのprivate指定の変数へのアクセスが上手く行かない。
以下エラー内容
$ g++ -o prob2 prob2.cpp cal.cpp In file included from cal.cpp:1:0: cal.h: In member function ‘double NewCalc::mul()’: cal.h:6:10: error: ‘double FundCalc::m_num1’ is private double m_num1; ^ cal.cpp:26:10: error: within this context return m_num1*m_num2; ^ In file included from cal.cpp:1:0: cal.h:7:10: error: ‘double FundCalc::m_num2’ is private double m_num2; ^ cal.cpp:26:17: error: within this context return m_num1*m_num2; ^ In file included from cal.cpp:1:0: cal.h: In member function ‘double NewCalc::div()’: cal.h:7:10: error: ‘double FundCalc::m_num2’ is private double m_num2; ^ cal.cpp:29:6: error: within this context if(m_num2 == 0){ ^ In file included from cal.cpp:1:0: cal.h:6:10: error: ‘double FundCalc::m_num1’ is private double m_num1; ^ cal.cpp:31:10: error: within this context return m_num1/m_num2; ^ In file included from cal.cpp:1:0: cal.h:7:10: error: ‘double FundCalc::m_num2’ is private double m_num2; ^ cal.cpp:31:17: error: within this context return m_num1/m_num2; ^
###試したこと
private指定子をpublic指定子に変更すれば(当たり前だが)アクセスは可能。
おそらくアクセスの方法が間違ってる(?)と思うのですが、参考サイトを見た感じでは問題は無い感じですが・・・
よって何が違うのか教えていただけると大変ありがたく思います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。