我正在尝试从基类调用派生类的非成员函数,但是收到此错误:
错误:没有匹配函数来调用'generate_vectorlist(const char&)'
以下是基类的相关代码片段:
//Element.cpp
#include "Vector.h"
...
string outfile;
cin >> outfile;
const char* outfile_name = outfile.c_str();
generate_vectorlist(*outfile_name); //ERROR
...
和派生类(这是一个模板类,所以标题中的所有内容):
//Vector.h
template <class T>
void generate_vectorlist(const char* outfile_name = "input.txt" )
{
std::ofstream vectorlist(outfile_name);
if (vectorlist.is_open())
for (Element::vciter iter = Element::vectors.begin(); iter!=Element::vectors.end(); iter++)
{
Vector<T>* a = new Vector<T>(*iter);
vectorlist << a->getx() << '\t' << a->gety() << '\t'<< a->getz() << std::endl;
delete a;
}
else { std::cout << outfile_name << " cannot be opened." << std::endl;}
vectorlist.close();
}
我的猜测是我只缺少一个小语法。有什么想法吗?
答案 0 :(得分:3)
你正在取消引用指针,所以你要传递一个const char,而不是一个const char *。
试试这个:
generate_vectorlist(outfile_name);
答案 1 :(得分:3)
你有两个问题:
generate_vectorlist
需要const char *
,而不是const char &
。
模板类型不在函数签名中,因此编译器无法推断出类型,因此需要指定它(在我的示例中使用int
)。
所以你需要这样做:
generate_vectorlist<int>(outfile_name);
答案 2 :(得分:1)
在第一位,尝试: generate_vectorlist(outfile_name);
你应该传递一个字符指针,而不是一个字符。
答案 3 :(得分:1)
您需要指定模板参数。编译器无法用来推断出T
的类型。因此,您必须使用generate_vectorlist<MyType>(outfile_name);
的相应类型将其称为MyType
。
答案 4 :(得分:1)
这是问题所在:
template <class T>
void generate_vectorlist(const char* outfile_name = "input.txt" )
编译器无法推断出T的类型,因此不知道使用哪个generate_vectorlist
。
这样称呼:
generate_vectorlist<vectortype>(outfile_name);
虽然我实际上建议这段代码首先没有任何意义。