みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C++ クラス定義の質問

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;
}

投稿日時 - 2017-01-23 21:46:12

QNo.9284996

困ってます

質問者が選んだベストアンサー

× double annualInterestRate = 0.03;
○ double SavingsAccount::annualInterestRate = 0.03;

投稿日時 - 2017-01-24 10:59:13

お礼

早速に、明解なご回答を頂きまして、有難うございます。
ちゃんとコンパイルできました。

投稿日時 - 2017-01-24 11:32:38

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問

オススメのQ&Aはありません。