【发布时间】:2011-07-12 16:03:43
【问题描述】:
我已经在这里阅读了大约 15 个未定义的参考主题,并且也使用谷歌找到了一个有效的答案,但没有真正有帮助。
我编写了一个 1D 和 2D 简单存储类,它允许通过直接访问数据(加上一些便利访问器)来快速循环。 1D 在这里(2D 几乎相同,只是 2D)
标题:
#ifndef MULTI1_H
#define MULTI1_H
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
template <class T>
class Multi1
{
public:
Multi1(int32_t size_ = -1);
~Multi1();
void set(T val, int32_t pos);
T& operator[] (int32_t pos) const;
T& at(int32_t pos) const;
int32_t m_size;
T *m_data;
};
#endif // MULTI1_H
主体:
#include "multi1.h"
template <class T>
Multi1<T>::Multi1(int32_t size_) :
m_size(size_),
m_data(NULL)
{
if (size_>0)
m_data = (T *) malloc (sizeof(T)*size_);
else
m_size = 0;
}
template <class T>
Multi1<T>::~Multi1()
{
if (m_data!=NULL)
free (m_data);
}
template <class T>
void Multi1<T>::set(T val, int32_t pos)
{
m_data[pos] = val;
}
template <class T>
T& Multi1<T>::operator[](int32_t pos) const
{
return m_data[pos];
}
template <class T>
T& Multi1<T>::at(int32_t pos) const
{
return m_data[pos];
}
./build/main.o: In function `setupDemo(Multi1<voCam*>&, Multi1<voBoard*>&, Multi2<voBoardObservation*>&)':
./src/main.cpp:32: undefined reference to `Multi1<voCam*>::operator[](int) const'
./src/main.cpp:31: undefined reference to `Multi1<voCam*>::operator[](int) const'
./src/main.cpp:30: undefined reference to `Multi1<voBoard*>::operator[](int) const'
./src/main.cpp:29: undefined reference to `Multi1<voBoard*>::operator[](int) const'
./src/main.cpp:41: undefined reference to `Multi1<voCam*>::operator[](int) const'
....
我检查了 5 次包含的内容,最近我已经习惯了 C 编程,在那里我可以避免链接器仇杀之类的事情。
注意:我正在用 g++ 编译,链接器标志是-lstdc++ -lm
【问题讨论】:
-
您使用不推荐使用的标头有什么特殊原因吗?
-
我不敢相信在 15 次关于“未定义引用”错误的讨论中,没有一个讨论过您的特定问题。这很常见,应该出现在最初的几个点击中。
标签: c++ class reference undefined