Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
08.04.2014, 19:15     Std::map <string, class> ОШИБКА C2512 #1
Есть следующий код:
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: нет подходящего конструктора по умолчанию"
При удалении строки ( где комментарий), прога работает, но мне нужно чтобы в паре ключ - значение, значением был именно класс. Кто что скажет?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
08.04.2014, 19:44     Std::map <string, class> ОШИБКА C2512 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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);
}
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
08.04.2014, 19:52  [ТС]     Std::map <string, class> ОШИБКА C2512 #3
Спасибо, с этим примером помогло, а если вот с таким? Тут еще библиотека 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: нет подходящего конструктора по умолчанию"
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
08.04.2014, 20:33     Std::map <string, class> ОШИБКА C2512 #4
map при использовании квадратных скобок пытается создавать новый объект класса (при условии, что ключ новый, но компилятору-то всё равно: он же компилирует обе ветки). Создаёт "молча", чтобы при чтении квадратными скобками из несуществующего ключа подставлялся объект по умолчанию. Если у класса нет конструктора по умолчанию (который можно вызывать без параметров), то при использовании квадратных скобок возникает ошибка. Использование методов insert (а лучше, если доступно, emplace) и find поможет избежать такой неприятности.
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
08.04.2014, 23:08  [ТС]     Std::map <string, class> ОШИБКА C2512 #5
Немножко недопонимаю

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? А то у меня одни ошибки получаются.
rcyn
13 / 9 / 2
Регистрация: 30.01.2014
Сообщений: 47
08.04.2014, 23:39     Std::map <string, class> ОШИБКА C2512 #6
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);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2014, 15:24     Std::map <string, class> ОШИБКА C2512
Еще ссылки по теме:

Ошибка: отсутствует оператор ">>"; типы операндов: std::istream >> std::string C++
C++ ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
Стоит ли очищать в деструкторе std::map , std::vecotor? C++

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

Или воспользуйтесь поиском по форуму:
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
09.04.2014, 15:24  [ТС]     Std::map <string, class> ОШИБКА C2512 #7
Ребят, пробовал через insert, он все равно жалуется на то, что нет конструктора по умолчанию. Если инициализировать значения в конструкторе, то все ок, но как инициализировать Texture &t?

Добавлено через 1 час 50 минут
Тема закрыта, огромное спасибо zss и Nick Alte.
Yandex
Объявления
09.04.2014, 15:24     Std::map <string, class> ОШИБКА C2512
Ответ Создать тему
Опции темы

Текущее время: 01:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru