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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 93, средняя оценка - 4.83
yava
3 / 3 / 0
Регистрация: 13.07.2009
Сообщений: 83
#1

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

13.07.2009, 11:32. Просмотров 11747. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объявление массива (C++):

Объявление массива - C++
Всем добрый день, очень нужна помощь. Вопрос собственно такой: Объявляется объект class MainClass { MainClass(); ...

объявление массива - C++
int N = 10; int mas = {5,8,2,0,6,3,8,2,7,9}; По чему так нельзя, подчеркивает masN]?

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

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

Объявление константы и массива в классе - C++
Задача: 1. объявить константу в созданном классе и сделать ее видимой для всех методов данного класса; 2. объявить массив, размер...

Объявление динамического одномерного массива. - C++
БИЛЕТ №14 3. Составьте программу, в которой объявляется динамический одномерный массив заполненный числами типа int. Причем первыми...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Evg
Эксперт CАвтор FAQ
17815 / 6025 / 388
Регистрация: 30.03.2009
Сообщений: 16,554
Записей в блоге: 26
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
577 / 344 / 9
Регистрация: 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
17815 / 6025 / 388
Регистрация: 30.03.2009
Сообщений: 16,554
Записей в блоге: 26
13.07.2009, 12:37 #4
Цитата Сообщение от RazorQ Посмотреть сообщение
Используй заголовок типа:
first.h
C++
1
int marray[10][10];
ТОже неправильно. extern должен быть в файле .h, а строку 6 из твоей версии main.cpp надо удалять
0
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
13.07.2009, 12:38 #5
Точно. Всё я напутал.
0
Evg
Эксперт CАвтор FAQ
17815 / 6025 / 388
Регистрация: 30.03.2009
Сообщений: 16,554
Записей в блоге: 26
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
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
13.07.2009, 13:20 #7
Цитата Сообщение от Evg Посмотреть сообщение
#ifndef FIRST_H // <--- пусть тебя не пугает этот макрос. На начальном этапе
#define FIRST_H // воспринимай его "так надо", со временем поймёшь
А разве он настолько сложен, чтобы его сейчас понять. Здесь все предельно просто, чтобы один заголовок в один и тот же файл больше одного раза не включался.
0
Evg
Эксперт CАвтор FAQ
17815 / 6025 / 388
Регистрация: 30.03.2009
Сообщений: 16,554
Записей в блоге: 26
13.07.2009, 13:23 #8
Цитата Сообщение от RazorQ Посмотреть сообщение
А разве он настолько сложен, чтобы его сейчас понять. Здесь все предельно просто, чтобы один заголовок в один и тот же файл больше одного раза не включался.
Нет, не сложно. Но человеку, который в первый раз в жизни растаскивает исходник по двум файлам - действительно сложно. Особенно если учесть, что у него нет чёткого понимания, что делает директива include
0
yava
3 / 3 / 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
17815 / 6025 / 388
Регистрация: 30.03.2009
Сообщений: 16,554
Записей в блоге: 26
13.07.2009, 15:00 #10
В посте #6 я всё тебе расписал, в каком файле что лежит
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2009, 15:00
Привет! Вот еще темы с ответами:

Объявление размера одномерного массива - C++
Добрый день! У меня есть функция в которой я обрабатываю одномерный массив! но размер его зарание не знаю! Как поступить? ...

Объявление struct в элемент массива. - C++
Доброго дня! Нужно реализовать следующую задачу... Есть массив : int map; Теперь мы перебираем каждый элемент массива, и...

Объявление двумерного массива в классе - C++
Здравствуйте. Мне нужно создать поле в классе, выраженное двумерным массивом. Я делаю так: class Fence { private: const int...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.07.2009, 15:00
Ответ Создать тему
Опции темы

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