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

Std::map <string, class> ОШИБКА C2512

08.04.2014, 19:15. Показов 1751. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть следующий код:
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
#include <vector>
#include <map>
class Aluy
{
public:
    Aluy (int x, int y)
    {
        int z = x+y;
    }
};
 
class superAluy
{
public:
    
    std::map<String, Aluy> djigurda;
    superAluy()
    {};
    void lol (String name, int x, int y)
    {
        Aluy A(x,y);
        djigurda [name] = A; // ОШИБКА ТУТ
    }
};
 
int main ()
{
}
При попытке скомпилировать выдает ошибку "C2512: Aluy::Aluy: нет подходящего конструктора по умолчанию"
При удалении строки ( где комментарий), прога работает, но мне нужно чтобы в паре ключ - значение, значением был именно класс. Кто что скажет?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2014, 19:15
Ответы с готовыми решениями:

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

Std::unordered_multimap<std::string, int> map
Приветствую. Как можно получить только &quot;уникальный&quot; ключ в контейнере? std::unordered_multimap&lt;std::string, int&gt; map; ...

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int')
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i = Bullets.begin(); i != Bullets.end(); /**/) В строке цикла вот...

6
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
08.04.2014, 19:44
Лучший ответ Сообщение было отмечено ssAprillss как решение

Решение

C++
1
2
3
4
5
6
7
8
class Aluy
{
public:
    Aluy (int x=0, int y=0)
    {
        int z = x+y;
    }
};
Добавлено через 5 минут
Компилируется вот такой код:
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
#include <vector>
#include <map>
#include <string>
using namespace std;
class Aluy
{
public:
    Aluy (int x=0, int y=0)
    {
        int z = x+y;
    }
};
class superAluy
{
public:
    
    std::map<string, Aluy> djigurda;
    superAluy()
    {};
    void lol (string name, int x, int y)
    {
        Aluy A(x,y);
        djigurda [name] = A; // ОШИБКА ТУТ
    }
};
 
int main ()
{
       superAluy SS;
       string a("text");
       SS.lol(a,0,1);
}
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
08.04.2014, 19:52  [ТС]
Спасибо, с этим примером помогло, а если вот с таким? Тут еще библиотека sfml подключена.


Это сам конструктор:
C++
1
Animation(Texture &t, int x=0, int y=0, int w=0, int h=0, int count=0, float Speed=0, int step=0)
Что делать с текстурой? Подскажите пожалуйста.

Здесь аналогичная ошибка: "error C2512: Animation::Animation: нет подходящего конструктора по умолчанию"
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
08.04.2014, 20:33
map при использовании квадратных скобок пытается создавать новый объект класса (при условии, что ключ новый, но компилятору-то всё равно: он же компилирует обе ветки). Создаёт "молча", чтобы при чтении квадратными скобками из несуществующего ключа подставлялся объект по умолчанию. Если у класса нет конструктора по умолчанию (который можно вызывать без параметров), то при использовании квадратных скобок возникает ошибка. Использование методов insert (а лучше, если доступно, emplace) и find поможет избежать такой неприятности.
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
08.04.2014, 23:08  [ТС]
Немножко недопонимаю

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class AnimationManager
{
    public:
        String currentAim;
        std::map<String, Animation> animList;
 
        AnimationManager()
        {};
        
            void create(String name, Texture &t, int x, int y, int w, int h, int count, float Speed, int step)
            {
                
                    animList [name] = Animation ( t, x, y, w, h, count, Speed, step);
            currentAim = name;
            }
Вот у меня есть такой класс, конструктор Animation я описал(сообщение выше) как теперь воспользоваться insert? А то у меня одни ошибки получаются.
0
13 / 9 / 5
Регистрация: 30.01.2014
Сообщений: 47
08.04.2014, 23:39
insert в мапу можно таким образом
C++
1
2
3
4
5
6
7
8
9
typedef string key_type;
typedef int value_type;
   
 
   std::map<key_type,value_type> m;
   m.insert(std::make_pair("first",1)); // простой способ
 
   std::pair<key_type,value_type> p("second", 2); // второй способ
   m.insert(p);
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
09.04.2014, 15:24  [ТС]
Ребят, пробовал через insert, он все равно жалуется на то, что нет конструктора по умолчанию. Если инициализировать значения в конструкторе, то все ок, но как инициализировать Texture &t?

Добавлено через 1 час 50 минут
Тема закрыта, огромное спасибо zss и Nick Alte.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2014, 15:24
Помогаю со студенческими работами здесь

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Emplace в std::map. Как добавить элемент в std::map без копирования?
здравствуйте... есть ли способ не писать так: std::map&lt;int, char&gt; ksa; ksa.emplace(std::piecewise_construct, ...

Std::map или string внутри класса?
Как эффективней хранить экземпляры класса, что бы потом находить нужный? В связки std::map или задавать отдельное поле с имением или ID...

Заголовочный файл для std::map<string,int>
Добрый вечер. Назрел такой вопрос. Про написании программы телефонная книга не понимаю, какие методы нужно писать в хэдер файл, если у нас...

Куда будет указывать указатель в std::map<string,pointer *>?
Чисто теоретически,хотелось бы узнать у знатоков C++ Допустим есть некий контейнер std::map&lt;const string, someClass *&gt; container...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru