Ошибка компиляции при использовании двух typename в классе шаблона

Я использую Arduino 1.8.5 ide. Я просто создаю класс с двумя typename, который называется "Map". Этот класс принимает все вариации int и String. Например;

class Map<int, int>;
class Map<int, String>;
class Map<String, int>;
class Map<String, String>;


Map<int, String> *list = new Map<int, String>();

Если я создам экземпляр этого класса, как указано выше, в файле Main.ino, то все будет ок. Но если я создам другой файл с расширением .h, который называется "Test.h", то компиляция не удастся. Это файлы;

Main.ino

#include "Map.h"
#include "Test.h"

Test *test = new Test();
Map<int, String> *list = new Map<int, String>();


void setup() {

}

void loop() {

}

Карта.cpp

#include "Arduino.h"
#include "Map.h"

template<typename E, typename T> Map<E, T>::Map()
{

}


template class Map<int, int>;
template class Map<int, String>;
template class Map<String, int>;
template class Map<String, String>;

Карта.h

#ifndef Map_h
#define Map_h

#include "Arduino.h"

template<typename E, typename T> class Map {

public:
    Map();
    ~Map();
};

#endif

Тест.h

#ifndef _Test_h
#define _Test_h


#include "Arduino.h"
#include "Map.h"

class Test
{
public :
    Test();
    ~Test();
    Map<int, String> *list = new Map<int, String>();
};

#endif

Ошибка:

In file included from C:\Users\zafer\Desktop\Main\Main.ino:3:0:
Test.h:14: error: expected ';' at end of member declaration
  Map<int, String> *list = new Map<int, String>();

                                        ^

Test.h:14: error: expected unqualified-id before '>' token
  Map<int, String> *list = new Map<int, String>();

                                              ^

Test.h:14: error: wrong number of template arguments (1, should be 2)
  Map<int, String> *list = new Map<int, String>();

                                   ^

In file included from C:\Users\zafer\Desktop\Main\Main.ino:2:0:
Map.h:6: error: provided for 'template<class E, class T> class Map'
 template<typename E, typename T> class Map {

                                        ^
exit status 1
expected ';' at end of member declaration

Извините, если проблема уже была решена, но я не смог ее найти.

Спасибо.

, 👍0


1 ответ


Лучший ответ:

3

В этом объявлении класса:

class Test
{
public :
    Test();
    ~Test();
    Map<int, String> *list = new Map<int, String>();
};

Эта строка неверна:

    Map<int, String> *list = new Map<int, String>();

Вы не можете выполнить процедурный код при объявлении класса. Это должно быть в конструкторе или какой-то другой функции.

Например, это компилируется без ошибок:

Тест.h

#ifndef _Test_h
#define _Test_h


#include "Arduino.h"
#include "Map.h"

class Test
{
public :
    Test() { list = new Map<int, String>; } ;
    ~Test();
    Map<int, String> *list;
};

#endif
,