1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 216
1

Видимость переменной в разных файлах

14.01.2016, 20:42. Показов 3688. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер) Помоги пожалуйста разобраться) Нужно чтобы переменная len из файла 2 попала (была определена) в файле 1. Компилятор выдает ошибку "Ошибка 1 error LNK2001: неразрешенный внешний символ ""int len" ".

1 файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include<locale>
using namespace std;
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
    int length(char stroka[]);
    extern int len;
    char x[] = "Наше предложение";
    length(x);
    cout << len;
    cin.get();
    return 0;
}
2 файл
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include<locale>
using namespace std;
 
int length(char stroka[])
{
    int len = 0;
    while (stroka++) len++;
    return len;
    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2016, 20:42
Ответы с готовыми решениями:

Видимость класса в других файлах
Если я написал свой класс в файле 1.cpp, как я могу воспользоваться им в файле 2.cpp !?

Использование переменной в разных файлах
Файлы: login.php - форма авторизации data.php - код авторизации main.php...

Видимость функций в файлах темы
Описание проблемы несколько путано, но я попробую.. Сделал информер. В корне темы в папка. В этой...

Видимость созданного объекта класса в других файлах проекта
Здравствуйте, прошу помочь. знаком с С++, пытаюсь разобраться в С шарп. как и где необходимо...

24
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
14.01.2016, 20:46 2
Цитата Сообщение от tst Посмотреть сообщение
Нужно чтобы переменная len из файла 2 попала (была определена) в файле 1.
Глобально её определи, а не в функции, так она только в функции видна.
0
Модератор
Эксперт CЭксперт С++
5273 / 2361 / 342
Регистрация: 20.02.2013
Сообщений: 5,758
Записей в блоге: 20
14.01.2016, 20:50 3
tst, по выходу из функции length() переменная len уничтожается. Сделайте её глобальной:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include<locale>
using namespace std;
 
int len = 0;
 
int length(char stroka[])
{
    while (stroka++) len++;
    return len;
    
}
Добавлено через 19 секунд
nord_v, опередил )))
0
1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 216
14.01.2016, 20:55  [ТС] 4
Теперь len определена, однако все равно результат не выводит
0
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
14.01.2016, 21:00 5
А так?
C++
1
cout << length(x);
0
Модератор
Эксперт CЭксперт С++
5273 / 2361 / 342
Регистрация: 20.02.2013
Сообщений: 5,758
Записей в блоге: 20
14.01.2016, 21:06 6
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <locale>
#include "second_file.h"
 
int main()
{
    setlocale(LC_ALL, "Russian");
    
    char x[] = "Наше предложение";
    std::cout <<  length(x);;
    std::cin.get();
    return 0;
}
second_file.h
C++
1
2
3
4
5
6
int length(char stroka[])
{
    int len = 0;
    while (stroka++) len++;
    return len;
}
Добавлено через 2 минуты
nord_v, опять опередил )))
0
1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 216
14.01.2016, 21:10  [ТС] 7
Ошибок не выдает, однако на экране пусто
0
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
14.01.2016, 21:15 8
C++
1
2
3
4
5
6
7
int length(char stroka[])
{
    while (*stroka++) 
        len++;
    return len;
    
}
Добавлено через 1 минуту
Цитата Сообщение от gru74ik Посмотреть сообщение
second_file.h
gru74ik, ты что?!
0
Модератор
Эксперт CЭксперт С++
5273 / 2361 / 342
Регистрация: 20.02.2013
Сообщений: 5,758
Записей в блоге: 20
14.01.2016, 21:18 9
Цитата Сообщение от nord_v Посмотреть сообщение
gru74ik, ты что?!
В чём проблема?
0
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
14.01.2016, 21:18 10
Цитата Сообщение от tst Посмотреть сообщение
однако на экране пусто
Выхода из цикла нет (выход у тебя, если указатель будет NULL, а с чего ему быть NULL?).

Добавлено через 35 секунд
Цитата Сообщение от gru74ik Посмотреть сообщение
В чём проблема?
Реализацию в заголовочный файл?
0
1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 216
14.01.2016, 21:19  [ТС] 11
Последний вариант работает, только внутри функции необходимо определить len. Спасибо
0
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
14.01.2016, 21:20 12
Цитата Сообщение от tst Посмотреть сообщение
только внутри функции необходимо определить len.
Как у тебя тоже будет работать.
0
1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 216
14.01.2016, 21:22  [ТС] 13
Так как выдает ошибку "Ошибка 1 error C2065: len: необъявленный идентификатор"
0
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
14.01.2016, 21:28 14
Цитата Сообщение от tst Посмотреть сообщение
Так как выдает ошибку "Ошибка 1 error C2065: len: необъявленный идентификатор"
Значит что-то не так сделал.
Миниатюры
Видимость переменной в разных файлах   Видимость переменной в разных файлах   Видимость переменной в разных файлах  

1
Модератор
Эксперт CЭксперт С++
5273 / 2361 / 342
Регистрация: 20.02.2013
Сообщений: 5,758
Записей в блоге: 20
14.01.2016, 21:29 15
Цитата Сообщение от nord_v Посмотреть сообщение
Реализацию в заголовочный файл?
О Боги! Ну создай для одной-единственной функциий хедер с прототипом и отдельный .cpp-файл с реализацией.
Как будто всегда реализация функций пишется отдельно!
Шаблоны, например, вон вообще по умолчанию в хедерах пишутся - не будет компилироваться раздельно. И чё теперь? Функции-члены классов сплошь и рядом в хэдерах полностью реализуют. Абсолютно нормально.
Я понимаю, если бы я сотни классов умудрился засунуть и интерфейс и реализацию в один хэдер. А тут функция из трёх строчек, созданная для примера. Которую вообще можно было в мэйн засунуть без всякой раздельной компиляции и ещё и проинлайнить к тому же...
Чего цепляться-то?
1
1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 216
14.01.2016, 21:33  [ТС] 16
У меня задача, многофайлового проекта. А как сделать на данном примере, передачу параметра по ссылке?
0
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
14.01.2016, 21:34 17
Цитата Сообщение от gru74ik Посмотреть сообщение
Шаблоны, например, вон вообще по умолчанию в хедерах пишутся - не будет компилироваться раздельно. И чё теперь?
gru74ik, что-то я тебя не узнаю. Шаблоны тут при чём? Там нет реализаций (определений).
Цитата Сообщение от gru74ik Посмотреть сообщение
Функции-члены классов сплошь и рядом в хэдерах полностью реализуют
В объявлении классов? Это другой случай, там inline получается, при подключении такого хедера к нескольким .cpp множественного определения не будет.
0
Модератор
Эксперт CЭксперт С++
5273 / 2361 / 342
Регистрация: 20.02.2013
Сообщений: 5,758
Записей в блоге: 20
14.01.2016, 21:36 18
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
//#include <locale>
#include "second_file.h"
 
int main()
{
    //setlocale(LC_ALL, "Russian");
 
    char x[] = "This is our phrase.";
    std::cout << "The length of our phrase is: " << length(x);;
    std::cin.get();
    return 0;
}


second_file.h
C++
1
2
3
4
5
6
7
8
9
10
11
#ifndef SECOND_FILE_H_INCLUDED
#define SECOND_FILE_H_INCLUDED
 
int length(char stroka[])
{
    int len = 0;
    while (*stroka++) len++;
    return len;
}
 
#endif // SECOND_FILE_H_INCLUDED
Миниатюры
Видимость переменной в разных файлах  
0
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
14.01.2016, 21:41 19
Цитата Сообщение от gru74ik Посмотреть сообщение
#ifndef SECOND_FILE_H_INCLUDED
#define SECOND_FILE_H_INCLUDED
Это ты для кого сделал? К нескольким .cpp подключи свой хедер.
1
Неэпический
17848 / 10616 / 2049
Регистрация: 27.09.2012
Сообщений: 26,686
Записей в блоге: 1
14.01.2016, 21:43 20
gru74ik, ну или добавь inline
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2016, 21:43
Помогаю со студенческими работами здесь

Как обеспечить видимость класса во всех файлах проекта
как мы знаем, с помощью этого синтаксиса : using MyClass=Class; создается алиас MyClass класса...

Видимость сервера в разных vlan
Доброго времени суток! Помогите, пожалуйста с таким вопросом: На картинке изображена схема. В...

Видимость хостов из разных сетей
День добрый. Есть 3 сети. Сеть А. (192.168.88.0-254) На входе стоит машина с...

Видимость переменной
Добрый день. Столкнулся с проблемой видимости переменных в двух методах. Есть код //in this...


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

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

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