Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
1

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

08.04.2014, 19:15. Просмотров 919. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
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 ошибка...

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

Разъясните код пжлст(выдает ошибку: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 !=...

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

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

6
zss
Модератор
Эксперт С++
7772 / 7007 / 4396
Регистрация: 18.12.2011
Сообщений: 18,527
Завершенные тесты: 1
08.04.2014, 19:44 2
Лучший ответ Сообщение было отмечено 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
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
08.04.2014, 19:52  [ТС] 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: нет подходящего конструктора по умолчанию"
0
Nick Alte
Эксперт С++
1651 / 1023 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
08.04.2014, 20:33 4
map при использовании квадратных скобок пытается создавать новый объект класса (при условии, что ключ новый, но компилятору-то всё равно: он же компилирует обе ветки). Создаёт "молча", чтобы при чтении квадратными скобками из несуществующего ключа подставлялся объект по умолчанию. Если у класса нет конструктора по умолчанию (который можно вызывать без параметров), то при использовании квадратных скобок возникает ошибка. Использование методов insert (а лучше, если доступно, emplace) и find поможет избежать такой неприятности.
1
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
08.04.2014, 23:08  [ТС] 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? А то у меня одни ошибки получаются.
0
rcyn
13 / 9 / 5
Регистрация: 30.01.2014
Сообщений: 47
08.04.2014, 23:39 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);
0
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
09.04.2014, 15:24  [ТС] 7
Ребят, пробовал через insert, он все равно жалуется на то, что нет конструктора по умолчанию. Если инициализировать значения в конструкторе, то все ок, но как инициализировать Texture &t?

Добавлено через 1 час 50 минут
Тема закрыта, огромное спасибо zss и Nick Alte.
0
09.04.2014, 15:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2014, 15:24

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

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

Странная ошибка: [Error] no match for call to '(std::string {aka std::basic_string<char>}) (int&)'
У меня появляется проблема при компиляции сей программы: #include &lt;iostream&gt; #include &lt;string&gt;...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru