【发布时间】:2016-11-05 23:17:39
【问题描述】:
我正在研究 Arduino,并想制作一架小型玩具钢琴。为了练习,我创建了自己的名为 map 的类。
#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
在 main 我只是正常调用它:
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());
}
}
}
}
【问题讨论】:
-
你的 Map() 和 add() 的定义在哪里?
-
一秒....添加
-
定义是否在源文件(cpp文件)上?
-
是的。 Visual Studio 为我自动生成 .h 和 .cpp 文件。