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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sor
35 / 35 / 0
Регистрация: 24.11.2011
Сообщений: 309
#1

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

22.03.2013, 23:42. Просмотров 428. Ответов 6
Метки нет (Все метки)

Здравствуйте!
Не могу вызвать функцию, объясните причину.

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++
Укажите правильный вариант вызова функции вместо пропуска …….. void func(int *p, int n, float k) { } main( ) { int...

Вызов функции - C++
Арифметические операции с длинными числами, которые представлены в виде массивов: есть функция умножения двух длинных чисел...

Вызов функции в C++ - C++
есть циклический вызов функции: for (int i=0; i&lt;start; i++) { if (classicZOT())...

Вызов функции - C++
Имеется такая вот функция, и к ней нужно написать вызов. #include &lt;stdio.h&gt; char *F12(char **p, int n) { int k,i,j; for...

Вызов функции - C++
#include &quot;stdafx.h&quot; #include &lt;locale&gt; #include &lt;iostream&gt; using namespace std; class Bankomat { public: Bankomat(){}; ...

Вызов функции - C++
Написать вызов функции для строковых переменных, помогите!

Вызов функции - C++
Помогите пожалуйста решить завтра зачет, а задачу не могу решить последнюю. Составить программу формирования элементов массивов Х, У и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 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
1480 / 1056 / 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
1480 / 1056 / 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++
Почему-то подчеркивает вот этот вызовsum sum(pa,pb,pc); . В чем проблема? #include &lt;iostream&gt; #include &lt;locale.h&gt; #include...

вызов функции - C++
как правильно вызвать данную функцию? typedef int key_t; typedef double value_t; value_t find(key_t key);

Вызов функции - C++
Здравствуйте! Такая задача:Разработать и испытать функцию, которая удаляет из целочисленного одномерного массива все элементы, совпадающие...

Вызов функции. - C++
Здрасти, у меня есть функция вычесления суммы цифр числа int sum_digit(int x) { int sum=0; while (x!=0){ ...

Вызов функции - C++
Привет всем. Вот такая структура кода: void Sailary() void SetShop() void SetMenu() void ResetData() int main()


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru