Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 05.03.2017
Сообщений: 31
1

Глобальная int

23.06.2017, 22:14. Показов 1101. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет
столкнулся с задачей

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// это "some.h"
 
using namespace std;
int n = 0; 
 
int lalalala() 
{
   ... code
   
   if(1==1)
   {
      n = atoi(wow[1]); // n = 15;
   }
   std::cout << n << std::endl;
}
но при выводе n в консоль ее значение равно 0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2017, 22:14
Ответы с готовыми решениями:

Какая из этих функций int Q(int w) int W(int y,int u,int i) сработает быстрее?
Если есть 2 функции(простые или перегруженные) к примеру Q(int w) int W(int y,int u,int i)или int...

Не работает перегрузка индексного оператора [], вместо [int][int] почему то нужно ставить [0][int][int]
#include&lt;iostream&gt; #include&lt;string&gt; #include&lt;vector&gt; #include&lt;algorithm&gt; #include&lt;ctime&gt;...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H ...

[C++ Error] Unit2.cpp(22): E2034 Cannot convert 'int (*)(int,int *)' to 'int'
Всем привет! Пожалуйста , помогите , почему выдает ошибку Unit2.cpp(22): E2034 Cannot convert 'int...

20
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
23.06.2017, 22:27 2
Цитата Сообщение от Parrx Посмотреть сообщение
но при выводе n в консоль ее значение равно 0
0 может так же означать ошибку преобразования, см. http://en.cppreference.com/w/cpp/string/byte/atoi:
Return value

Integer value corresponding to the contents of str on success. If the converted value falls out of range of corresponding return type, the return value is undefined. If no conversion can be performed, ​0​ is returned.
0
0 / 0 / 0
Регистрация: 05.03.2017
Сообщений: 31
23.06.2017, 22:54  [ТС] 3
Цитата Сообщение от gray_fox Посмотреть сообщение
0 может так же означать ошибку преобразования, см. http://en.cppreference.com/w/cpp/string/byte/atoi:
если поменять n на 10 то он выведет 10
0
Вездепух
Эксперт CЭксперт С++
11699 / 6378 / 1724
Регистрация: 18.10.2014
Сообщений: 16,087
23.06.2017, 23:06 4
Цитата Сообщение от Parrx Посмотреть сообщение
но при выводе n в консоль ее значение равно 0
"Магическое" поведение и нерепрезентативный огрызок кода.... Вы что-то выдумываете.
1
0 / 0 / 0
Регистрация: 05.03.2017
Сообщений: 31
23.06.2017, 23:20  [ТС] 5
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"Магическое" поведение и нерепрезентативный огрызок кода.... Вы что-то выдумываете.
убрал лишнее чтобы не мешалось
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
23.06.2017, 23:27 6
Что такое wow?
0
0 / 0 / 0
Регистрация: 05.03.2017
Сообщений: 31
23.06.2017, 23:32  [ТС] 7
Цитата Сообщение от oldnewyear Посмотреть сообщение
Что такое wow?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// это "some.h"
 
using namespace std;
int n = 10; 
 
int lalalala() 
{
   ... code
   
   if(1==1)
   {
      n = 15;
   }
   std::cout << n << std::endl;
}
даже если просто так сделать

выводит 10
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
23.06.2017, 23:39 8
Parrx, берём ваш код, что привели http://ideone.com/3OJdaI.
Так что проблема, очевидно, где-то в другом месте.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
23.06.2017, 23:45 9
Parrx, отладчиком умеешь пользоваться?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.06.2017, 23:47 10
Цитата Сообщение от Parrx Посмотреть сообщение
даже если просто так сделать
ошибка в 8й строке.
1
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
23.06.2017, 23:50 11
Цитата Сообщение от Parrx Посмотреть сообщение
// это "some.h"

int n = 10;
У n внешнее связывание, значит в заголовочном файле должно быть только объявление (int n; ), а в одном из файлов с исходным кодом - определение (int n = 10; ).
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
23.06.2017, 23:53 12
Цитата Сообщение от gray_fox Посмотреть сообщение
У n внешнее связывание, значит в заголовочном файле должно быть только объявление (int n, а в одном из файлов с исходным кодом - определение (int n = 10.
Всё правильно (только extern нужно добавить в объявлении в .h), но, в данном случае, у ТС другая проблема (у него и реализация фукнции в .h).
0
Вездепух
Эксперт CЭксперт С++
11699 / 6378 / 1724
Регистрация: 18.10.2014
Сообщений: 16,087
24.06.2017, 00:19 13
Цитата Сообщение от gray_fox Посмотреть сообщение
значит в заголовочном файле должно быть только объявление (int n; ),
"Только объявление" - это extern int n;. А int n; - это тоже определение.

Добавлено через 1 минуту
Цитата Сообщение от Parrx Посмотреть сообщение
даже если просто так сделать
выводит 10
Не бывает.
2
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
24.06.2017, 00:26 14
Весь код в студию
0
0 / 0 / 0
Регистрация: 05.03.2017
Сообщений: 31
24.06.2017, 00:32  [ТС] 15
Цитата Сообщение от DevAlone Посмотреть сообщение
Весь код в студию
// class.h

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 "StdAfx.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string>
#include <C:\\Program Files\\MySQL\\MySQL Server 5.5\\include\\mysql.h>
#include <iostream>
 
#pragma comment(lib, "libmysql.lib")
 
using namespace std;
extern int n;
 
void class1() 
 { 
     int nTyang = 0;
     MYSQL mysql, *connector; 
     MYSQL_RES* result; 
     MYSQL_ROW row; 
 
     int query_result; 
     mysql_init(&mysql); 
     connector = mysql_real_connect( &mysql, "localhost", "root", "", "db", 3306, 0, 0);
 
      //std::cout << "connected successfully!" << std::endl; 
      query_result = mysql_query(connector, "SELECT * FROM table"); 
      if(query_result == 0)
      { 
          result = mysql_store_result(connector);
 
          
          if (row = mysql_fetch_row(result))
          { 
            n = atoi(row[1]);
          }
 
          mysql_free_result(result);
      } 
 
      mysql_close(connector); 
 
}
// main.cpp
C++
1
2
3
4
5
6
7
8
int n;
 
void lalalala(unsigned char *buf)
{
    class1();
 
        unsigned char buff[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,n}
}
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
24.06.2017, 00:42 16
Parrx,
Цитата Сообщение от nd2 Посмотреть сообщение
отладчиком умеешь пользоваться?
???
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
24.06.2017, 00:49 17
Во первых - это не весь код, во вторых я вижу там подключение к БД и попытку сделать запрос, откуда я могу знать, какое у вас будет значение query_result и row? Здесь поможет только поставить брейкпоинт и посмотреть.
0
0 / 0 / 0
Регистрация: 05.03.2017
Сообщений: 31
24.06.2017, 02:00  [ТС] 18
Цитата Сообщение от DevAlone Посмотреть сообщение
Во первых - это не весь код, во вторых я вижу там подключение к БД и попытку сделать запрос, откуда я могу знать, какое у вас будет значение query_result и row? Здесь поможет только поставить брейкпоинт и посмотреть.
код очень большой для форума
в отладке
C++
1
2
3
4
5
      mysql_close(connector); 
 
} Х -- тут он останавливает 
//приложение крэшит с ошибкой
// Stack around the variable 'mysql' was corrupted
из базы берет всего одно значение типа varchar
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
24.06.2017, 02:15 19
Вероятно вы неправильно используете mysql. Вернёмся к проблеме с n. Написал вот такой код:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "someheader.h"
 
#include <iostream>
 
int n = 1;
 
int main()
{
    std::cout << "before changing: " << n << std::endl;
    changeN();
    std::cout << "after changing: " << n << std::endl;
    return 0;
}
someheader.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef SOMEHEADER_H
#define SOMEHEADER_H
 
extern int n;
 
void changeN()
{
    char query_result = 0;
    if (query_result == 0) {
        char row = 1;
        if (row) {
            n = 156;
        }
    }
}
 
#endif // SOMEHEADER_H
В результате получаю это:
before changing: 1
after changing: 156
Когда меняю query_result, получаю следующее:
before changing: 1
after changing: 1
Так что нет здесь никакой магии и всё работает вполне ожидаемо
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.06.2017, 12:34 20
Цитата Сообщение от Parrx Посмотреть сообщение
// Stack around the variable 'mysql' was corrupted
действительно...
и чего это у нас теперь программко то глючит?

подумаешь... память пробили, и стек раскурочили...
0
24.06.2017, 12:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2017, 12:34
Помогаю со студенческими работами здесь

Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)'
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #define row 5...

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.?
Не понимаю, с чего начинать. Заранее спс.

Что означает ошибка too few arguments to function ‘int my_func(int, int)’ (язык C++)?
В чём проблема? #include &lt;iostream&gt; int my_func (int i, int j){ int z; z=i+j; return...

[Linker error] undefined reference to `sterling(int, int, int)'
#include &lt;iostream&gt; using namespace std; int sterling(int,int,int); int sterling(int,int); int...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru