Форум программистов, компьютерный форум CyberForum.ru

Вызов функции - C++

Восстановить пароль Регистрация
 
Sor
35 / 35 / 0
Регистрация: 24.11.2011
Сообщений: 309
22.03.2013, 23:42     Вызов функции #1
Здравствуйте!
Не могу вызвать функцию, объясните причину.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
template <typename T>
    void Calc_etalon (QDir & DirTxt)
    {
        //QDir DirTxt(Path);
        QVector <T> vec;
        vec.clear();
        foreach (const QString & fName, DirTxt.entryList(QStringList ("*.txt") )) //цикл по всем txt
        {
            QFile file( (DirTxt.path()+fName).toAscii() ) ;
            file.open(QIODevice::ReadWrite | QIODevice::Text); //открываем файл для чтения и записи
            while (!file.atEnd())
            {
                QByteArray line = file.readLine();
                QString str = line.data();//прочитанная строка
                vec.push_back(str.data()); //data?
            }//вектор заполнен данными из файла
 
            size_t etalon=0;
            for (size_t i=0; i<vec.size(); ++i)
            {
                etalon+=vec[i];
            }
            vec.push_back(etalon/vec.size()); //добавляем в вектор эталон
            QTextStream out(&file);
            //out << vec.last();//записываем эталон в конец файла
            out << vec[vec.size()];            
            file.close();
        }
    }
C++ (Qt)
1
2
QDir DirTxt("D://cells//");
Calc_etalon(DirTxt);
Ошибки:
..\DefineTheCell\mainwindow.cpp: In member function 'void MainWindow::on_pushButton_2_clicked()':
..\DefineTheCell\mainwindow.cpp:255:23: error: no matching function for call to 'MainWindow::Calc_etalon(QDir&)'
..\DefineTheCell\mainwindow.cpp:255:23: note: candidate is:
..\DefineTheCell\/mainwindow.h:161:10: note: template<class T> void MainWindow::Calc_etalon(QDir&)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2013, 23:42     Вызов функции
Посмотрите здесь:

C++ Вызов функции
C++ Вызов функции.
C++ Вызов функции
C++ Вызов функции в C++
Вызов функции в возврате значения функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.03.2013, 23:54     Вызов функции #2
для вызова нужно явно указать аргумент шаблона (не просто же так она шаблонная)
C++
1
2
3
4
5
6
7
template <typename T>
void Calc_etalon (QDir & DirTxt) {}
 
...
 
QDir DirTxt("D://cells//");
Calc_etalon<int>(DirTxt);
но похоже там дальше фигня начнется.
Sor
35 / 35 / 0
Регистрация: 24.11.2011
Сообщений: 309
23.03.2013, 00:11  [ТС]     Вызов функции #3
А как же мне выкрутиться тогда, если у меня куча файлов..где-то флоты, где-то size_t..перегрузить что ли?

Цитата Сообщение от Sor Посмотреть сообщение
C++ (Qt)
1
vec.push_back(str.data()); //data?
Как тут предусмотреть хотя бы 2 варианта? toInt и toFloat
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.03.2013, 00:23     Вызов функции #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
написать свою шаблонную функцию преобразования из строки в тип, который в шаблонную функцию передается +
специализации для int и float.
 
template <typename T>
T MyConvertionFromString(const QString& str);
 
template <>
int MyConvertionFromString<int>(const QString& str)
{
   return str.toInt();
}
 
template <>
int MyConvertionFromString<float>(const QString& str)
{
   return str.toFloat();
}
 
 
template <typename T>
void Calc_etalon (QDir & DirTxt)
{
   ...
   vec.push_back(MyConvertionFromString<T>(str));
   ...
}
Sor
35 / 35 / 0
Регистрация: 24.11.2011
Сообщений: 309
25.03.2013, 11:27  [ТС]     Вызов функции #5
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
template <typename T>  //шаблонные функции для конвертирования из строки
    T MyConvertionFromString(const QString& str);
 
    template <>
    int MyConvertionFromString<int>(const QString& str)
    {
       return str.toInt();
    }
 
    template <>
    float MyConvertionFromString<float>(const QString& str)
    {
       return str.toFloat();
    }
 
 
    template <typename T>
    void Calc_etalon (QDir & DirTxt)
    {
        //QDir DirTxt(Path);
        QVector <T> vec;
        vec.clear();
        foreach (const QString & fName, DirTxt.entryList(QStringList ("*.txt") )) //цикл по всем txt
        {
            QFile file( (DirTxt.path()+fName).toAscii() ) ;
            file.open(QIODevice::ReadWrite | QIODevice::Text); //открываем файл для чтения и записи
            while (!file.atEnd())
            {
                QByteArray line = file.readLine();
                QString str = line.data();//прочитанная строка
                vec.push_back(MyConvertionFromString<T>(str));
                //vec.push_back(str.toInt()); ////////////////////////// toFloat
            }//вектор заполнен данными из файла
 
            size_t etalon=0;
            for (size_t i=0; i<vec.size(); ++i)
            {
                etalon+=vec[i];
            }
            vec.push_back(etalon/vec.size()); //добавляем в вектор эталон
            QTextStream out(&file);
            out << vec.last();//записываем эталон в конец файла
            file.close();
        }
    }
не работает.
C++ (Qt)
1
2
3
4
5
6
7
..\DefineTheCell\/mainwindow.h:162:15: error: explicit specialization in non-namespace scope 'class MainWindow'
..\DefineTheCell\/mainwindow.h:163:55: error: template-id 'MyConvertionFromString<int>' in declaration of primary template
..\DefineTheCell\/mainwindow.h:168:15: error: explicit specialization in non-namespace scope 'class MainWindow'
..\DefineTheCell\/mainwindow.h:169:59: error: template-id 'MyConvertionFromString<float>' in declaration of primary template
..\DefineTheCell\/mainwindow.h:169:11: error: 'float MainWindow::MyConvertionFromString(const QString&)' cannot be overloaded
..\DefineTheCell\/mainwindow.h:163:9: error: with 'int MainWindow::MyConvertionFromString(const QString&)'
..\DefineTheCell\/mainwindow.h:176:10: error: too many template-parameter-lists
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.03.2013, 22:44     Вызов функции #6
хз что за дела.
вот аналог компилится в студии:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <string>
#include <vector>
#include <iostream>
 
template <typename T>
T FromString(const std::string& str);
 
 
template <>
int FromString<int>(const std::string& str)
{
    std::cout << "From string to int" << std::endl;
    return 0;
}
 
template <>
float FromString<float>(const std::string& str)
{
    std::cout << "From string to float" << std::endl;
    return 0;
}
 
 
class Foo
{
public:
    template <typename T>
    void Func(const std::string& str)
    {
        std::vector<T> v;
        v.push_back(FromString<T>(str));
    }
};
 
 
int main(void)
{
    Foo foo;
    foo.Func<int>("1");
    foo.Func<float>("1");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2013, 20:24     Вызов функции
Еще ссылки по теме:

вызов функции C++
Вызов функции C++
Вызов функции в параметре другой функции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Sor
35 / 35 / 0
Регистрация: 24.11.2011
Сообщений: 309
26.03.2013, 20:24  [ТС]     Вызов функции #7
а какая студия?
Yandex
Объявления
26.03.2013, 20:24     Вызов функции
Ответ Создать тему
Опции темы

Текущее время: 12:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru