c ++中未解决的外部符号错误

Cry*_*tal 0 c++

我试图做一个涉及命名空间,静态数据成员和函数的简单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)

Ste*_*hen 5

我假设您实际上正在编译.cpp文件(因为其他函数链接).

该错误可能是由于未定义annualInterestRate静态变量.

您已声明它(在类标题中),但它没有定义.在你的cpp文件中添加:

// static member definition
double JWang::SavingsAccount::annualInterestRate = ...;
Run Code Online (Sandbox Code Playgroud)

请参阅一篇文章,重点介绍静态成员的声明和定义之间的区别.

C++标准的第9.4.2节说:"静态数据成员的定义应出现在包含成员类定义的命名空间范围内."