Доступ к функции не члена производного класса из базового класса - PullRequest
0 голосов
/ 22 июня 2010

Я пытаюсь вызвать функцию, не являющуюся членом производного класса, из базового класса, но получаю эту ошибку:

ошибка: нет соответствующей функции для вызова '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();
}

Полагаю, мне просто не хватает синтаксиса. Есть идеи?

Ответы [ 5 ]

3 голосов
/ 22 июня 2010

У вас есть две проблемы:

  1. generate_vectorlist занимает const char *, а не const char &.

  2. Тип шаблона отсутствует в сигнатуре функции, поэтому компилятор не может определить тип, поэтому вам необходимо указать его (используя int в моем примере).

Так что вам нужно сделать:

generate_vectorlist<int>(outfile_name);
3 голосов
/ 22 июня 2010

Вы разыменовываете указатель, так что вы передаете const char, а не const char *.

попробуйте это:

generate_vectorlist(outfile_name);
1 голос
/ 22 июня 2010

Это проблема:

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

Компилятор не может определить тип T, поэтому он не знает, какой generate_vectorlist использовать.

Назовите это так:

generate_vectorlist<vectortype>(outfile_name);

Хотя я бы на самом деле предположил, что этот код не имеет никакого смысла.

1 голос
/ 22 июня 2010

Вам необходимо указать аргумент шаблона.Нет ничего, что компилятор может использовать для определения типа T.Поэтому вам нужно будет назвать его как generate_vectorlist<MyType>(outfile_name);, используя соответствующий тип для MyType.

1 голос
/ 22 июня 2010

В первом бите попробуйте: generate_vectorlist (outfile_name);

Вы должны передавать символьный указатель, а не символ.

...