Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/67: Рейтинг темы: голосов - 67, средняя оценка - 4.94
yava
4 / 4 / 0
Регистрация: 13.07.2009
Сообщений: 83
1

Объявление массива

13.07.2009, 11:32. Просмотров 12098. Ответов 9
Метки нет (Все метки)

Есть два файла первый с функцией main() main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include "first.cpp"
using namespace std;
 
 
 
void main()
{
    cout << "test" <<"\n";
    
 
    string cmd;
    cin >> cmd;
}
и второй файл first.cpp:
C++
1
int marray[10][10];
Компилятор выдает ошибку, я не поемаю почему и как исправить:
Error 1 error LNK2005: "int (* marray)[10]" (?marray@@3PAY09HA) already defined in first.obj main.obj
Error 2 fatal error LNK1169: one or more multiply defined symbols found D:\master\Debug\include_files.exe 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2009, 11:32
Ответы с готовыми решениями:

Объявление массива
Всем добрый день, очень нужна помощь. Вопрос собственно такой: Объявляется...

объявление массива
int N = 10; int mas = {5,8,2,0,6,3,8,2,7,9}; По чему так нельзя,...

Объявление двумерного массива
Здравствуйте! Как объявить двумерный массив как public , я имею ввиду что...

Объявление динамического массива
Есть ли какой-нибудь способ сначала (например, в классе) объявить динамический...

Объявление большого массива в C++
Здравствуйте. Не могу разрешить такую задачу: нужен массив int a;, при...

9
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
13.07.2009, 11:36 2
У тебя есть строка #include "first.cpp", при этом файл first.cpp наверняка дополнительно включен в проект (т.е. он ещё раз компилируется). В итоге ты фактически имеешь следующий набор исходников:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
int marray[10][10]; // <---- результат работы директивы #include "first.cpp"
using namespace std;
 
 
 
void main()
{
        cout << "test" <<"\n";
        
 
        string cmd;
        cin >> cmd;
}
C++
1
int marray[10][10];
Т.е. имеешь два определения myarray
0
RazorQ
582 / 349 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
13.07.2009, 11:39 3
Используй заголовок типа:
first.h
C++
1
int marray[10][10];
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include "first.h"
using namespace std;
 
 extern int marray[10][10];
 
void main()
{
        cout << "test" <<"\n";
        
 
        string cmd;
        cin >> cmd;
}
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
13.07.2009, 12:37 4
Цитата Сообщение от RazorQ Посмотреть сообщение
Используй заголовок типа:
first.h
C++
1
int marray[10][10];
ТОже неправильно. extern должен быть в файле .h, а строку 6 из твоей версии main.cpp надо удалять
0
RazorQ
582 / 349 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
13.07.2009, 12:38 5
Точно. Всё я напутал.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
13.07.2009, 12:47 6
Итого, окончательный вариант, как оно должно быть:

C++
1
2
3
4
5
6
7
8
9
10
11
12
// Файл main.cpp
#include <iostream>
#include <string>
#include "first.h"
using namespace std;
 
void main()
{
        cout << "test" <<"\n";
        string cmd;
        cin >> cmd;
}
C++
1
2
3
4
// Файл first.cpp
#include "first.h" // <--- в данный момент для контроля от собственных ошибок
 
int marray[10][10];
C++
1
2
3
4
5
6
7
// Файл first.h
#ifndef FIRST_H // <--- пусть тебя не пугает этот макрос. На начальном этапе 
#define FIRST_H //      воспринимай его "так надо", со временем поймёшь
 
extern int marray[10][10];
 
#endif // FIRST_H
1
RazorQ
582 / 349 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
13.07.2009, 13:20 7
Цитата Сообщение от Evg Посмотреть сообщение
#ifndef FIRST_H // <--- пусть тебя не пугает этот макрос. На начальном этапе
#define FIRST_H // воспринимай его "так надо", со временем поймёшь
А разве он настолько сложен, чтобы его сейчас понять. Здесь все предельно просто, чтобы один заголовок в один и тот же файл больше одного раза не включался.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
13.07.2009, 13:23 8
Цитата Сообщение от RazorQ Посмотреть сообщение
А разве он настолько сложен, чтобы его сейчас понять. Здесь все предельно просто, чтобы один заголовок в один и тот же файл больше одного раза не включался.
Нет, не сложно. Но человеку, который в первый раз в жизни растаскивает исходник по двум файлам - действительно сложно. Особенно если учесть, что у него нет чёткого понимания, что делает директива include
0
yava
4 / 4 / 0
Регистрация: 13.07.2009
Сообщений: 83
13.07.2009, 14:58  [ТС] 9
Я пишу в VS, да если убрать файл из проекта а объявление оставить, то все работает, но ...
А как сделать так, чтобы файл оставить в проекте и все работало?
Если убрать
C++
1
#include "first.cpp"
то компилятор пишет
Error 1 error C2065: 'marray' : undeclared identifier d:\master\include_files\main.cpp 13
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
13.07.2009, 15:00 10
В посте #6 я всё тебе расписал, в каком файле что лежит
1
13.07.2009, 15:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2009, 15:00

Объявление размерности массива в Microsoft VS
До этого пользовался CodeBlocks, но препод в ВУЗе требует, чтобы мы все делали...

Объявление двумерного массива в классе
Здравствуйте. Мне нужно создать поле в классе, выраженное двумерным массивом....

Объявление константы и массива в классе
Задача: 1. объявить константу в созданном классе и сделать ее видимой для всех...


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

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

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