14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
1

Не могу разобратся с ошибкой

16.12.2014, 13:16. Показов 1613. Ответов 18
Метки нет (Все метки)

Здравствуйте, есть такой вот код:
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
#pragma once
 
#include <windows.h>
 
class PerformanceTimer {
public:
    PerformanceTimer(): start_(0), finish_(0) {
        queryFrequency();
        start();
    }
    void start() {
        LARGE_INTEGER large;
        QueryPerformanceCounter(&large);
        start_=large.QuadPart;
    }
    void finish() {
        LARGE_INTEGER large;
        QueryPerformanceCounter(&large);
        finish_=large.QuadPart;
    }
    double getSeconds() const {
        return double(finish_-start_)/double(frequency_);
    }
private:
    static queryFrequency() {
        if (frequency_==0) {
            LARGE_INTEGER large;
            QueryPerformanceFrequency(&large);
            frequency_=large.QuadPart;
        }
    }
    static __int64 frequency_;
    __int64 start_;
    __int64 finish_;
};
на 25 строке мне выдает ошибку:
Код
C:\Users\****\Test\perf_tim.h|25|error: ISO C++ forbids declaration of 'queryFrequency' with no type [-fpermissive]|
Как ее можно выправить ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2014, 13:16
Ответы с готовыми решениями:

Не могу разобратся с ошибкой в приведенном ниже коде!!!
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

Не могу разобратся
3. Как изменяется напряжение стабилитрона UСТ когда ток стабилитрона становится ниже 20 мА? 4....

разобратся не могу
Привет всем.Дали курсовую(не мне). Немогу разобратся. Создайте в базе данных под управлением...

Не могу разобратся
Всем привет. Мне стало интересно, как можно реализовать проверку авторизации пользователя в админ...

18
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
16.12.2014, 13:21 2
tdo22, queryFrequency - это функция. А возвращаемое значение у нее не указано. Судя по всему, там нужен void.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 13:38  [ТС] 3
DrOffset, не помогает. Ошибка та же
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
16.12.2014, 13:52 4
Цитата Сообщение от tdo22 Посмотреть сообщение
не помогает. Ошибка та же
Покажи как сделал.
0
Эксперт по математике/физикеЭксперт С++
1989 / 1319 / 379
Регистрация: 16.05.2013
Сообщений: 3,423
Записей в блоге: 6
16.12.2014, 13:59 5
Цитата Сообщение от tdo22 Посмотреть сообщение
DrOffset, не помогает. Ошибка та же
А в реализации не забыли возвращаемый тип указать?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 14:01  [ТС] 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
#pragma once
 
#include <windows.h>
 
class PerformanceTimer {
public:
    PerformanceTimer(): start_(0), finish_(0) {
        void queryFrequency();
        start();
    }
    void start() {
        LARGE_INTEGER large;
        QueryPerformanceCounter(&large);
        start_=large.QuadPart;
    }
    void finish() {
        LARGE_INTEGER large;
        QueryPerformanceCounter(&large);
        finish_=large.QuadPart;
    }
    double getSeconds() const {
        return double(finish_-start_)/double(frequency_);
    }
private:
    static void queryFrequency() {
        if (frequency_==0) {
            LARGE_INTEGER large;
            QueryPerformanceFrequency(&large);
            frequency_=large.QuadPart;
        }
    }
    static __int64 frequency_;
    __int64 start_;
    __int64 finish_;
};
Добавлено через 18 секунд
но ошибка осталась
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
16.12.2014, 14:03 7
Цитата Сообщение от tdo22 Посмотреть сообщение
C++
1
2
3
4
PerformanceTimer(): start_(0), finish_(0) 
{ 
    void queryFrequency();
.......
А здесь-то зачем void добавил?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 14:06  [ТС] 8
Забыл за него)
С ним или без него, ошибка остается
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
16.12.2014, 14:21 9
Цитата Сообщение от tdo22 Посмотреть сообщение
С ним или без него, ошибка остается
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
class PerformanceTimer {
public:
    PerformanceTimer(): start_(0), finish_(0) {
        queryFrequency();
        start();
    }
    void start() {
        LARGE_INTEGER large;
        QueryPerformanceCounter(&large);
        start_=large.QuadPart;
    }
    void finish() {
        LARGE_INTEGER large;
        QueryPerformanceCounter(&large);
        finish_=large.QuadPart;
    }
    double getSeconds() const {
        return double(finish_-start_)/double(frequency_);
    }
private:
    static void queryFrequency() {
        if (frequency_==0) {
            LARGE_INTEGER large;
            QueryPerformanceFrequency(&large);
            frequency_=large.QuadPart;
        }
    }
    static __int64 frequency_;
    __int64 start_;
    __int64 finish_;
};
Т.е. вот так у тебя не работает? И выдает ошибку "ISO C++ forbids declaration of 'queryFrequency' with no type"?
Все верно? Если да, то ты уверен, что именно этот код компилируешь? Потому что тут ошибок нет.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 14:30  [ТС] 10
Перезапустил Code::Blocks и ошибка пропала.
Но теперь появилась следующая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    if (it!=str.end())
    {
        switch (*it)
        {
        case 'm':
            num<<=10;
        case 'k':
            num<<=10;
            break;
        }
    }
    return num;
на первой строке ошибка:
C:\Users\*****\C++ Test\BWT\main.cpp|471|error: name lookup of 'it' changed for ISO 'for' scoping [-fpermissive]
C:\Users\*****\C++ Test\BWT\main.cpp|471|note: (if you use '-fpermissive' G++ will accept your code)|
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
16.12.2014, 14:34 11
Цитата Сообщение от tdo22 Посмотреть сообщение
name lookup of 'it' changed for ISO 'for' scoping
Что же ты так кода-то жалеешь. Показывай вместе с циклом
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 14:48  [ТС] 12
Весь блок кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
inline unsigned readSize(const std::string &str)
{
    unsigned num=0;
    for (std::string::const_iterator it=str.begin();it!=str.end()&&'0'<=*it&&*it<='9';++it)
    {
        num*=10;
        num+=*it-'0';
    }
    if (it!=str.end())
    {
        switch (*it)
        {
        case 'm':
            num<<=10;
        case 'k':
            num<<=10;
            break;
        }
    }
    return num;
}
Добавлено через 31 секунду
Полный код имеет 628 строк, если надо будет, выложу файл
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 15:00  [ТС] 13
вот весь проект:
BWT.rar
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
16.12.2014, 15:01 14
Ну нормальным английским языком же написано:

C++
1
for (std::string::const_iterator it=str.begin();it!=str.end()&&'0'<=*it&&*it<='9';++it)
it не существует вне тела цикла, перенеси объявление выше for.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 15:14  [ТС] 15
Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
inline unsigned readSize(const std::string &str)
{
    unsigned num=0;
    string::const_iterator it=str.begin();
    for (; it!=str.end()&&'0'<=*it&&*it<='9';++it)
    {
        num*=10;
        num+=*it-'0';
    }
    if (it != str.end())
    {
        switch (*it)
        {
        case 'm':
            num<<=10;
        case 'k':
            num<<=10;
            break;
        }
    }
 
    return num;
}
Добавлено через 2 минуты
Теперь здесь ошибка:
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
#pragma once
 
#include <windows.h>
 
class PerformanceTimer {
public:
    PerformanceTimer(): start_(0), finish_(0) {
        queryFrequency();
        start();
    }
    void start() {
        LARGE_INTEGER large;
        QueryPerformanceCounter(&large);
        start_=large.QuadPart;
    }
    void finish() {
        LARGE_INTEGER large;
        QueryPerformanceCounter(&large);
        finish_=large.QuadPart;
    }
    double getSeconds() const {
        return double(finish_-start_)/double(frequency_);
    }
private:
    static queryFrequency() {
        if (frequency_==0) {
            LARGE_INTEGER large;
            QueryPerformanceFrequency(&large);
            frequency_=large.QuadPart;
        }
    }
    static __int64 frequency_;
    __int64 start_;
    __int64 finish_;
};
Ошибка на 22, 26, 29 строках
Код
obj\Debug\main.o||In function `ZNK16PerformanceTimer10getSecondsEv':|
C:\Users\*****C++ Test\BWT\perf_tim.h|22|undefined reference to `PerformanceTimer::frequency_'|
0
Заблокирован
16.12.2014, 15:22 16
Цитата Сообщение от tdo22 Посмотреть сообщение
C:\Users\*****\C++ Test\BWT\main.cpp|471|error: name lookup of 'it' changed for ISO 'for' scoping [-fpermissive]
C:\Users\*****\C++ Test\BWT\main.cpp|471|note: (if you use '-fpermissive' G++ will accept your code)|
у меня почему-то нет такого
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 15:33  [ТС] 17
какой компилятор ?
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
16.12.2014, 15:47 18
Лучший ответ Сообщение было отмечено tdo22 как решение

Решение

tdo22,
В cpp (perf_tim.cpp) к этому h-файлу (perf_tim.h) добавь вот это:
C++
1
__int64 PerformanceTimer::frequency_ = 0;
1
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
16.12.2014, 16:23  [ТС] 19
все работает. Спасибо!
Но теперь, может кто подскажет как этой программой пользоваться ?
Я так понимаю ей нужно передать строку параметром при запуске, верно ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2014, 16:23
Помогаю со студенческими работами здесь

Не могу разобратся
Прога работающий аксес базами, не хочет работать в клиентским машине... Поняти не...

Не могу разобратся с формулой
Нужно определить является ли точка с координатами х,у точкой пересечения диагоналей...

Не могу разобратся с эффектами
Всем привет!!! Пишу код для загрузки и отрисовки эффектов,и столкнулся с проблемой,после компиляции...

Не могу разобратся с кодами!!!
Привет Всем!!! Я недавно начал заниматся программированием начал с Borland Delphi 2005 нашел к...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru