【发布时间】:2014-04-03 22:51:28
【问题描述】:
我正在尝试使用以下内容创建 Queue<T> 类的新对象:
Queue<char[40]> *q = new Queue<char[40]>(100);
然后,我想在另一个类构造函数上使用这个q:
Interface<char[40]> i(q);
如果我只是使用它,我会收到一条错误消息invalid conversion from ‘Queue<char [40]>*’ to ‘int’,我认为这意味着我正在尝试传递 q 的值,它是指向它的指针而不是实际值。美好的。然后我重新定义了Interface<T>构造函数来接收指针而不是值本身,所以签名是
Interface(DataStructure<T>& q);
由于队列扩展了 DataStructure。由于某种原因,现在q 的实例化失败了:
undefined reference to `Queue<char [40]>::Queue(int)
但我很确定我已经编写了带有 INT 参数的构造函数方法
template<typename T>
Queue<T>::Queue(int size): DataStructure<T>(size) {
std::cout << size << std::endl;
}
那为什么我会得到这个错误呢?玩指针只会弄得一团糟,我现在不知道该怎么办。
【问题讨论】:
-
"undefined reference" 似乎建议您在源文件中而不是在头文件中定义构造函数。stackoverflow.com/questions/495021/…
-
另外注意:这个
char[40]看起来有点可疑。也许您想改用std::string? -
@dyp 这个构造函数在头文件中定义为
Queue(int size); -
这是否意味着您在源文件中确实定义了(= 问题中显示的块;函数的定义包含函数体
{ /*...*/ })?这不适用于类模板的成员函数。请阅读我上面链接的问答。 -
@dyp 好的,现在可以了。还有一个问题:要使用带有
char[40]的模板,我必须在任何地方都使用指针吗?如果我想在函数中返回某些东西的值,它会抱怨我正在返回一个数组。
标签: c++ templates pointers queue instantiation