С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 29

Объявление статической переменной и статической функции в классе

14.06.2017, 19:29. Показов 1285. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, столкнулся с проблемой и не могу решить. Есть класс SavingsAccount и в нем объявлена статическая переменная для процентной ставки на всех клиентов. Есть функция modifyInterestRate которая должна изменять значение статической переменной если соответствует диапазону от 0 до 100. Проблема в том что как я понимаю компилятор жалуется на функцию которая тоже статическая, но вот как решить данную проблему не смог найти, прошу помощи вот файлы класса и реализации
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef SAVINGSACCOUNT_H
#define SAVINGSACCOUNT_H
class SavingsAccount{
public:
    SavingsAccount(double=0,int=0);
    ~SavingsAccount();
    SavingsAccount &calculateMonthlyInterest();
    static void modifyInterestRate(int);
    void print()const;
private:
    int static annualInterestRate;
    double savingsBalance;
 
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <iomanip>
 
#include "SavingsAccount.h"
 
using namespace std;
 
SavingsAccount::SavingsAccount(double balance,int rate)
{
    annualInterestRate = 0;
    cout << "Конструктор класс SavingsAccount запущен" << endl;
    modifyInterestRate(rate);
    savingsBalance = balance;
}
 
SavingsAccount::~SavingsAccount()
{
    cout << "Деструктор класса SavingsAccount запущен" << endl;
}
 
void SavingsAccount::modifyInterestRate(int rate){
    if (rate >= 0 && rate <= 100)
        annualInterestRate = rate;
    else{
        cout << "Ошибка ввода процентной ставки, ставка выставлена в 0%" << endl;
        annualInterestRate = 0;
    }
}
 
SavingsAccount &SavingsAccount::calculateMonthlyInterest(){
    savingsBalance += (savingsBalance*(static_cast<double>(annualInterestRate)*0.01)) / 12;
    return *this;
}
void SavingsAccount::print()const{
    cout << "Текущий баланс при процентной ставке: " << annualInterestRate << "% равен: $" <<fixed<<setprecision(2)<< savingsBalance << endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <iomanip>
#include <math.h>
 
#include "SavingsAccount.h"
 
 
using namespace std;
 
int main(){
    setlocale(LC_ALL, "Russian");
    SavingsAccount saver1(2000.0);
    SavingsAccount saver2(3000.0);
    SavingsAccount::modifyInterestRate(5);
    saver1.calculateMonthlyInterest().print();
    saver2.calculateMonthlyInterest().print();
    return 1;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.06.2017, 19:29
Ответы с готовыми решениями:

Вылет приложения при вызове статической функции/переменной из библиотеки
Создал библиотеку в ней есть статический класс при вызове которого из приложения получаю аварийное завершение программы, даже debugger не...

Инициализация статической константы в классе
собственно сабж как это сделать если константа имеет тип класса? (не интегральная) т.е. надо вызвать у нее конструктор с определенным...

Объявление статической переменной
в наследнике класса Thread в модуле h объявляю private static int iLink. Компилится нормально. как начинаю ее использовать в модуле cpp...

2
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
14.06.2017, 19:38
рядом с реализацией методов сделайте инициализацию статической переменной:

SavingsAccount::annualInterestRate = 0;
вроде такой синтаксис. а может и
int SavingsAccount::annualInterestRate = 0;

не уверен, что int static ... это правильно.
вот static int annualInterestRate - это точно правильно.

ну и до кучи всегда выкладывайте сюда ошибки, которые вам там пишут. а то их отгадывать приходится.
1
0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 29
14.06.2017, 19:43  [ТС]
а и еще забыл код ошибки

1>------ Сборка начата: проект: Классы часть 2, Конфигурация: Debug Win32 ------
1> Исходный код.cpp
1> SavingsAccount.cpp
1> Создание кода...
1>SavingsAccount.obj : error LNK2001: неразрешенный внешний символ ""private: static int SavingsAccount::annualInterestRate" (?annualInterestRate@SavingsAccount@@0HA )"
1>E:\General\YandexDisk\Программирование \C++\project_c++\Классы часть 2\Debug\Классы часть 2.exe : fatal error LNK1120: неразрешенных внешних элементов: 1
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 1 минуту
int SavingsAccount::annualInterestRate = 0; сделал и заработало, спасибо большое)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2017, 19:43
Помогаю со студенческими работами здесь

Проблема с взаимодействием динамической и статической памяти - обращение к статической переменной
Здравствуйте! Помогите решить проблему! Задача такая: написать сортировку бинарным деревом, так что бы данные читались из текстового...

Инициализация статической переменной в базовом классе
Есть класс Tank. От этого класса будут наследники MyTank и EnemyTank. В классе Tank есть статическая переменная _hWnd, она общая для всех...

Обращение к статической переменной указав ее как параметр функции
Добрых времени суток. Есть статический класс. public static class DataActions { public static string procesId { get;...

Создание статической переменной
Задание звучит так: Объявить статическую переменную z. При каждом нажатии командной кнопки значение переменной должно увеличиваться на...

Наследование статической переменной
есть класс с статистическим полем я от него &quot;произвожу&quot; два потомка. у всех этик классов будет одно общее поле(переменная) или же у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru