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

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

Войти
Регистрация
Восстановить пароль
 
 
Raybek
0 / 0 / 0
Регистрация: 24.08.2013
Сообщений: 7
#1

Не могу объявить массив внутри main - ошибка при линковке - C++

24.08.2013, 16:28. Просмотров 946. Ответов 26
Метки нет (Все метки)

Доброго времени суток!

Я начинающий в С++. Использую gcc в Ubuntu 13.04 x64 bit.

Прохожу сейчас массивы. Заметил одну странность.
При попытке одновременного объвления
- массива внутри main
- и использования printf()
при компиляции выходит ошибка, я как понял линковщика, следующего содержания:
/tmp/ccXzvblP.o.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

Если по отдельности или выносить объявление массива до main, то компиляция идет без проблем.

Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
 
int main() {
    long int razmer=sizeof(a);
    long int dlina=razmer/sizeof(int);
 
    printf("В массиве 'a' %lu элемент(а,ов) \n",dlina);
 
    printf("Размер массива 'а' равен %lu Бт \n", razmer);
 
    //Выводим содержимое массива "а"    
    for (int i=0; i<dlina; ++i)
    {
        printf("Квадрат числа %u равен %u \n",a[i],a[i]*a[i]);
    };
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 16:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу объявить массив внутри main - ошибка при линковке (C++):

Ошибка при линковке - C++
Доброго времени суток! Возникают ошибки на этапе линковки: Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ SHA256_Init...

Ошибка при линковке - C++
Здравствуйте. Помогите пожалуйста с проблемой над которой бьюсь уже не один день. Все компиляторы выдают след ошибки Error 3 error...

VS 6.0 ошибка при линковке - C++
Всё время с 6.0 при линковке выдаёт Linking... LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/Test.exe :...

Ошибка LNK2019 при линковке - как это решать систематически? - C++
Господа, я пишу на с++ в Visual Studio 2010 с использованием boost. ( &quot;В шахматы великий комбинатор играл второй раз в жизни&quot; ) ...

Не могу объявить массив указателей на объект - C++
Здравствуйте! Такой вопрос. При объявлении массива указателей на объект появляются 3 ошибки. void Cindex::merge(Ckey *A, int l, int m, int...

Объявить массив? Запросто! Объявить массив массивов? А как это? - C++
Доброго времени суток! Конечно, все знают, как объявить массив! int main () { int array; }

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
24.08.2013, 21:24 #16
Raybek,
Цитата Сообщение от Croessmah Посмотреть сообщение
Компилируете командой gcc или g++?
Raybek
0 / 0 / 0
Регистрация: 24.08.2013
Сообщений: 7
24.08.2013, 21:24  [ТС] #17
Компилирую код в командной строке терминала следующим образом:

gcc array1.cpp -o array1
gray_fox
What a waste!
1507 / 1210 / 68
Регистрация: 21.04.2012
Сообщений: 2,545
Завершенные тесты: 3
24.08.2013, 21:29 #18
Цитата Сообщение от Raybek Посмотреть сообщение
gcc array1.cpp -o array1
Код
g++ array1.cpp -o array1
Raybek
0 / 0 / 0
Регистрация: 24.08.2013
Сообщений: 7
24.08.2013, 21:30  [ТС] #19
Цитата Сообщение от Croessmah Посмотреть сообщение
Компилируете командой gcc или g++?
расширение файла .c или .cpp?
Если gcc + cpp, Тогда попробуйте так:
gcc -o main -x c main.cpp -std=c99
Спасибо! Так скомпилировал!

Профессионалы, как новичок, из Ваших рассуждений выше вынес, что дело все-таки в используемом компилятором стандарте? с89, с99? А как узнать какой по умолчанию стандарт использует компилятор gcc?
gray_fox
What a waste!
1507 / 1210 / 68
Регистрация: 21.04.2012
Сообщений: 2,545
Завершенные тесты: 3
24.08.2013, 21:30 #20
либо
Код
gcc array1.cpp -o array1 -std=c99
Raybek
0 / 0 / 0
Регистрация: 24.08.2013
Сообщений: 7
24.08.2013, 21:32  [ТС] #21
Цитата Сообщение от Raybek Посмотреть сообщение
Спасибо! Так скомпилировал!

Профессионалы, как новичок, из Ваших рассуждений выше вынес, что дело все-таки в используемом компилятором стандарте? с89, с99? А как узнать какой по умолчанию стандарт использует компилятор gcc?
Че-то я ошибся. Не скопмилировал так. Выдал ошибку:
предупреждение: command line option «-std=c99» is valid for C/ObjC but not for C++ [по умолчанию включена]
/tmp/ccfAEPGR.o.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
24.08.2013, 21:33 #22
Цитата Сообщение от Raybek Посмотреть сообщение
А как узнать какой по умолчанию стандарт использует компилятор gcc?
Я же писал.
Цитата Сообщение от castaway Посмотреть сообщение
По-умолчанию, GCC использует стандарт gnu89
Raybek
0 / 0 / 0
Регистрация: 24.08.2013
Сообщений: 7
24.08.2013, 21:35  [ТС] #23
Цитата Сообщение от gray_fox Посмотреть сообщение
Код
g++ array1.cpp -o array1
Во! А так получилось! Спасибо.

Значит получается, что дело в стандарте используемом?
Croessmah
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
24.08.2013, 21:36 #24
Цитата Сообщение от Raybek Посмотреть сообщение
Спасибо! Так скомпилировал!
Вы компилируете код С, а не С++
Используйте g++, чтобы компилировать код С++

Добавлено через 37 секунд
Цитата Сообщение от Raybek Посмотреть сообщение
стандарте используемом?
gcc компилирует Си'шный код
g++ код С++
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.08.2013, 21:38 #25
Цитата Сообщение от gray_fox Посмотреть сообщение
либо
Код
gcc array1.cpp -o array1 -std=c99
gcc расширение .cpp не нравится. Если так:
Код
gcc array1.c -o array1 -std=c99
, то нормально компилирует.
Raybek
0 / 0 / 0
Регистрация: 24.08.2013
Сообщений: 7
24.08.2013, 21:39  [ТС] #26
Спасибо всем! Отличный форум! Буду теперь тут обитать
gray_fox
What a waste!
1507 / 1210 / 68
Регистрация: 21.04.2012
Сообщений: 2,545
Завершенные тесты: 3
24.08.2013, 21:45 #27
Цитата Сообщение от alsav22 Посмотреть сообщение
gcc расширение .cpp не нравится.
Да, действительно. можно так
Код
gcc -x c array1.cpp -o array1 -std=c99
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 21:45
Привет! Вот еще темы с ответами:

Ошибка при компиляции In function"int main()"; expected ';', before "cin", [Build Error] [main.o] Error 1 - C++
Книга &quot;Основы программирования на C++ том 1&quot;(Стэнли Б.Липпман). Приводится пример кода. #include &lt;iostream&gt; #include &lt;string&gt; using...

Ошибка multiple definition of main при наследовании - C++
Всем привет. Проблема описана много где в интернете , но я так и не смог понять в чём косяк у меня. Помогите разобраться. Есть...

как мне в функции main() объявить функцию Do (), подскажите пожалуйста, на таком глупом застрял - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; #include &lt;math.h&gt; using namespace std; class Tem; ...

Ошибка C4307 при объявлении в main() указателя шаблона-класса - C++
Привет, всем. Помогите, плиз, с синтаксисом. Возникает, ошибка при объявлении в main() указателя шаблона-класса. #include &lt;iostream&gt; ...


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

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

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