※ ChatGPTを利用し、要約された質問です(原文:C++ クラス定義の質問)
C++クラス定義の質問
このQ&Aのポイント
C++学習者です。Visual studio community 2015 を使っています。銀行口座を表す SavingsAccount というクラスを作り、添付のプログラムをコンパイルしようとしましたが、リンクエラーが発生しました。
エラーメッセージによると、未解決の外部シンボル annualInterestRate があるとのことです。値を代入しているのになぜ未解決なのでしょうか?どうすれば解決できるでしょうか?
以下がクラス定義ヘッダーファイル、クラス関数定義ファイル、およびクライアントプログラムのコードです。
C++学習者です。Visual studio community 2015 を使っています。
銀行口座を表す SavingsAccount というクラスを作り、添付のプログラムをコンパイルしようとしましたが。以下のようなエラーメッセージが出てきました。
1>------ ビルド開始: プロジェクト:ConsoleApplication86, 構成:Debug Win32 ------
1>savingsAccount.obj : error LNK2001: 外部シンボル ""private: static double SavingsAccount::annualInterestRate" (?annualInterestRate@SavingsAccount@@0NA)" は未解決です。
1>C:\Users\Shiro\documents\visual studio 2015\Projects\ConsoleApplication86\Debug\ConsoleApplication86.exe : fatal error LNK1120: 1 件の未解決の外部参照
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
ちゃんと値を代入しているのに、annualInterestRate が未解決とはどういうことなのでしょうか?
以下が、クラス定義ヘッダーファイル、クラス関数定義ファイル、クライアントプログラムです。どうかよろしくお願いいたします。
//****************************************
// クラス定義ヘッダーファイル
//****************************************
#pragma once
#ifndef SAVINGSACCOUNT_H
#define SAVINGSACCOUNT_H
class SavingsAccount {
static double annualInterestRate;
public:
SavingsAccount(double);
~SavingsAccount();
static void modifyInterestRate(double);
double calculateMonthlyInterest();
double getBalance() const;
double getSavingsBalance() const;
private:
double balance;
double savingsBalance;
};
#endif
//***************************************
// クラス関数定義ファイル
//***************************************
// savingsAccount class member functions
#include "stdafx.h"
#include <iostream>
using namespace std;
#include "savingsAccount.h"
double annualInterestRate = 0.03;
SavingsAccount::SavingsAccount(double initialAmount)
:balance(initialAmount)
{
savingsBalance = balance + calculateMonthlyInterest();
cout << "savings account with balance of " << balance
<< " and savings balance of " << savingsBalance
<< " has been constructed\n";
}
SavingsAccount::~SavingsAccount()
{
cout << "savings account of the savings balance of "
<< savingsBalance << " has been destructed\n";
}
void SavingsAccount::modifyInterestRate(double newRate) {
annualInterestRate = newRate;
}
double SavingsAccount::getBalance() const
{
return balance;
}
double SavingsAccount::getSavingsBalance() const
{
return savingsBalance;
}
double SavingsAccount::calculateMonthlyInterest()
{
return balance * annualInterestRate / 12;
}
//********************************************
// クライアントプログラム
//********************************************
// ConsoleApplication86.cpp :
// class SavingsAccount driver program
#include "stdafx.h"
#include <iostream>
using namespace std;
#include "savingsAccount.h"
int main()
{
SavingsAccount saver1(2000.00);
SavingsAccount saver2(3000.00);
cout << "original amount of saving for saver1 : " << saver1.getBalance()
<< " and savings with interest: " << saver1.getSavingsBalance() <<endl;
cout << "----------------------------------\n";
cout << "original amount of saving for saver2 : " << saver2.getBalance()
<< " and savings with interest: " << saver2.getSavingsBalance() << endl;
return 0;
}
お礼
早速に、明解なご回答を頂きまして、有難うございます。 ちゃんとコンパイルできました。