我试图做一个涉及命名空间,静态数据成员和函数的简单hw问题.我收到一个未解决的外部符号错误
Error 1 error LNK2001: unresolved external symbol "private: static double JWong::SavingsAccount::annualInterestRate" (?annualInterestRate@SavingsAccount@JWong@@0NA) SavingsAccount.obj SavingsAccount
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我会收到这个错误.也许我不知道静态变量与导致此错误的常规数据成员相比.这是我的代码:
SavingsAccount.h文件
#ifndef JWONG_SAVINGSACCOUNT_H
#define JWONG_SAVINGSACCOUNT_H
namespace JWong
{
class SavingsAccount
{
public:
// default constructor
SavingsAccount();
// constructor
SavingsAccount(double savingsBalance);
double getSavingsBalance();
void setSavingsBalance(double savingsBalance);
double calculateMonthlyInterest();
// static functions
static void modifyInterestRate(double newInterestRate);
static double getAnnualInterestRest();
private:
double savingsBalance;
// static members
static double annualInterestRate;
};
}
#endif
Run Code Online (Sandbox Code Playgroud)
SavingsAccount.cpp文件
#include <iostream>
#include "SavingsAccount.h"
// default constructor, set savingsBalance to 0
JWong::SavingsAccount::SavingsAccount() : savingsBalance(0)
{}
// constructor
JWong::SavingsAccount::SavingsAccount(double savingsBalance) : savingsBalance(savingsBalance)
{}
double JWong::SavingsAccount::getSavingsBalance()
{
return savingsBalance;
}
void JWong::SavingsAccount::setSavingsBalance(double savingsBalance)
{
this->savingsBalance = savingsBalance;
}
// returns monthly interest and sets savingsBalance to new amount
double JWong::SavingsAccount::calculateMonthlyInterest()
{
double monthlyInterest = savingsBalance * SavingsAccount::annualInterestRate / 12;
setSavingsBalance(savingsBalance + monthlyInterest);
return monthlyInterest;
}
void JWong::SavingsAccount::modifyInterestRate(double newInterestRate)
{
SavingsAccount::annualInterestRate = newInterestRate;
}
double JWong::SavingsAccount::getAnnualInterestRest()
{
return SavingsAccount::annualInterestRate;
}
Run Code Online (Sandbox Code Playgroud)
我假设您实际上正在编译.cpp文件(因为其他函数链接).
该错误可能是由于未定义annualInterestRate静态变量.
您已声明它(在类标题中),但它没有定义.在你的cpp文件中添加:
// static member definition
double JWang::SavingsAccount::annualInterestRate = ...;
Run Code Online (Sandbox Code Playgroud)
请参阅一篇文章,重点介绍静态成员的声明和定义之间的区别.
C++标准的第9.4.2节说:"静态数据成员的定义应出现在包含成员类定义的命名空间范围内."