не получается обратиться к методу класса из-за ошибки E0245 C++
при попытке написания дурака на cpp столкнулся с проблемой вызова метода из класса, а именно ошибка:
E0245 нестатическая ссылка не член должна указываться относительно заданного объекта
игроку нужно указать размер колоды в переменную size_deck и через метод _set_size_deck записать это значение в класс Deck
//.cpp файл
#include<iostream>
#include<algorithm>
#include"Deck.h"
#include"Headers.h"
namespace durak {
void StartDurak()
{
std::cout << "choice how cards in deck 24/36/52" << std::endl;
int size_deck;
std::cin >> size_deck;
Deck::_set_size_deck(size_deck);// << ошибка возникает здесь
}
}
//файл .h с классом
#pragma once
class Deck
{
public:
void _set_size_deck(int _size_deck)// << пытаюсь вызвать этот метод
{
_size_deck = size_deck;
}
protected:
private:
int** deck = new int*;
int size_deck; // << чтобы записать значение сюда
};
есть еще файл с main() но там настройки консоли и вызывается функция durak::StartDurak()
буду очень благодарен за ответ
Ответы (1 шт):
Запись с именем класса и :: допустима только для функций, объявленных как static, то есть для всего класса.
Deck::_set_size_deck(size_deck);
У вас же функция
void _set_size_deck(int _size_deck)
объявлена не как статическоая, а значит, должна вызываться для конкретного объекта.
Здесь
void StartDurak()
{
std::cout << "choice how cards in deck 24/36/52" << std::endl;
int size_deck;
std::cin >> size_deck;
Deck::_set_size_deck(size_deck);// << ошибка возникает здесь
}
у вас нет никакого объекта, поэтому непонятно, что вы хотите и как исправить ваш код. У какого конкретно объекта вы хотите изменить значение члена?
И еще, вы точно скопировали код? _size_deck = size_deck;? тут вы присваиваете аргументу член класса, а не наоборот. не думаю, что так и надо.
Кстати, начинать имена с подчеркивания не следует, есть определенные ограничения, но лучше вообще не иметь такой привычки.