从基类访问派生类的非成员函数

发布于 2024-09-06 12:26:53 字数 1084 浏览 6 评论 0原文

我试图从基类调用派生类的非成员函数,但出现此错误:

错误:没有匹配的函数可用于调用“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();
}

我的猜测是只有一个我缺少的小语法东西。有什么想法吗?

I'm trying to call a nonmember function of a derived class from a base class, but getting this error:

error: no matching function for call to 'generate_vectorlist(const char&)'

Here's the relevant code snippets from the base class:

//Element.cpp
#include "Vector.h"
    ...

string outfile;
cin >> outfile;
const char* outfile_name = outfile.c_str();
generate_vectorlist(*outfile_name); //ERROR
...

and the derived class (this is a template class, so everything's in the header):

//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();
}

My guess is there's just a small syntax thing that I'm missing. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

唔猫 2024-09-13 12:26:53

您取消引用指针,因此传递的是 const char,而不是 const char*。

试试这个:

generate_vectorlist(outfile_name);

You're dereferencing the pointer so you're passing a const char, not a const char*.

try this:

generate_vectorlist(outfile_name);
单身狗的梦 2024-09-13 12:26:53

您有两个问题:

  1. generate_vectorlist 采用 const char *,而不是 const char &

  2. 模板类型不在函数签名中,因此编译器无法推断出类型,因此您需要指定它(在我的示例中使用 int)。

所以你需要做:

generate_vectorlist<int>(outfile_name);

You have two problems:

  1. generate_vectorlist takes a const char *, not a const char &.

  2. The template type is not in the function signature so the compiler can not deduce the type therefore you need to specify it (using int in my example).

So you need to do:

generate_vectorlist<int>(outfile_name);
甚是思念 2024-09-13 12:26:53

首先,尝试:
生成向量列表(输出文件名);

您应该传递一个字符指针,而不是一个字符。

In the first bit, try:
generate_vectorlist(outfile_name);

You should be passing a character pointer, not a character.

明媚殇 2024-09-13 12:26:53

您需要指定模板参数。编译器无法使用任何东西来推断 T 是什么类型。因此,您必须像 generate_vectorlist(outfile_name); 那样调用它,并使用 MyType 的适当类型。

You need to specify the template argument. There's nothing the compiler can use to deduce what type T is. So you'll have to call it like generate_vectorlist<MyType>(outfile_name);, using the appropriate type for MyType.

空宴 2024-09-13 12:26:53

这就是问题所在:

template <class T>
void generate_vectorlist(const char* outfile_name = "input.txt" )

编译器无法推断出 T 的类型,因此它不知道要使用哪个 generate_vectorlist

像这样称呼它:

generate_vectorlist<vectortype>(outfile_name);

尽管我实际上建议这段代码首先没有任何意义。

This is the problem:

template <class T>
void generate_vectorlist(const char* outfile_name = "input.txt" )

The compiler can't deduce the type of T, so it has no idea which generate_vectorlist to use.

Call it like this:

generate_vectorlist<vectortype>(outfile_name);

Though I would actually suggest that this code doesn't make any sense in the first place.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文