Я работаю над Arduino и хочу создать маленькое игрушечное пианино. Для практики я создаю свой собственный класс, называемый map.C++ Arduino 1.6 на Visual Studio 2013
#ifndef Map_h
#define Map_h
#include "Arduino.h"
template <class Key, class Value> class Map
{
public:
Map();
~Map();
void add(Key key, Value value);
Value find(Key key);
private:
Key *keys;
Value *values;
int size;
bool resize();
};
#endif
В основном я просто называю это нормально:
Map<char, int> *name_to_freq = new Map<char, int>();
name_to_freq->add('c', 262);
Но я получил некоторые ошибки при компиляции.
ccQwtG4w.ltrans0.ltrans.o*: In function main
ccQwtG4w.ltrans0.o*: (.text.startup+0x354): undefined reference to Map<char, int>::Map()
ccQwtG4w.ltrans0.o*: (.text.startup+0x3de): undefined reference to Map<char, int>::add(char, int)
определение в .cpp файле:
Видит ли какой-либо один это раньше, и знает, как ее решить?
template <typename Key, typename Value>
Map<Key, Value>::Map()
{
keys = new Key[defaultArraySize];
values = new Value[defaultArraySize];
size = defaultArraySize;
}
template <typename Key, typename Value>
void Map< Key, Value>::add(Key key, Value value)
{
for (int i = 0; i < size; i++)
{
if (!keys[i])
{
keys[i] = key;
values[i] = value;
if (i >= size/2)
{
while (!resize());
}
}
}
}
где определение вашей карты() и добавить() ? –
Одна секунда .... Добавление –
- это определение в исходный файл (файл cpp)? –