Помощь - Поиск - Пользователи - Календарь
Полная версия: Microsoft Visual C++ 2008 не хочет компилировать
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Leidek
Я уже полгода наверное мучаюсь с C++. Постоянно Code::Blocks и Microsoft Visual 2008 выдают ошибки.
Кто разбирается - напишите пожалуйста небольшой тест-код для MS Visual 2008, чтобы по выдающим ошибкам вы нашли проблему..
volvo
Ты возьми "Hello, World", откомпилируй его и покажи результат. А уж если нет ошибок в "Hello, World" - значит присоединяй свой код, ошибки в нем...
Leidek
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello"<<endl;
return 0;
}
Вот что я написал. А вот что эта гадина выдает при компиляции -

>------ Построение начато: проект: First_primer, Конфигурация: Debug Win32 ------
1>Компиляция...
1>First_primer.cpp
1>Компоновка...
1>test.obj : error LNK2005: _main уже определен в First_primer.obj
1>E:\My Documents\Visual Studio 2008\Projects\First_primer\Debug\First_primer.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
1>Журнал построения был сохранен в "file://e:\My Documents\Visual Studio 2008\Projects\First_primer\First_primer\Debug\BuildLog.htm"
1>First_primer - ошибок 2, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 4 мин.
Ну здесь я догадался исключить First_pramer.obj из проекта. Но теперь у меня появляется черное окошечко при компиляции и исчезает. А внизу пишет что без ощибок.
volvo
Цитата
Но теперь у меня появляется черное окошечко при компиляции и исчезает. А внизу пишет что без ощибок.
При компиляции или при запуске? Если при запуске - то так и должно быть, ты ж не задерживаешь окно до нажатия любой клавиши, а сразу завершаешь программу. Так с чего оно должно задерживаться?
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello"<<endl;

cin.get(); // Вот теперь должно ждать нажатия клавиши
return 0;
}
Leidek
Volvo, спасибо. Разобрался. Проще использовать getchar(); Хотя и там свои глюки. Спасибо за советы))
Getus
Здравствуйте!
так что все таки обозначает ошибка "обнаружен многократно определенный символ"????
volvo
То и означает, что переменная (ну, если не переменная - то константа, или еще какая сущность - смысл от этого не меняется) с одинаковым именем была описана в разных единицах трансляции. Вот смотри:

f1.cpp

#include <iostream>

int i = 20;

int main()
{
std::cout << "Hello world: i = " << i << std::endl;
return 0;
}


f2.cpp
int i = 15;

int f(int x)
{
return 2 * x;
}

Заметила, что в обоих файлах присутствует переменная i? Так вот на этапе компиляции - все в порядке - в каждом файле - своя переменная, файл f1.cpp прекрасно компилируется в f1.obj, f2.cpp - в f2.obj... И тут запускается линкер. Которому надо собрать это все воедино, в exe-шник. А у линкера-то как раз большие проблемы: и в одном и в другом файле он находит упоминание о том, что должна быть переменная i... Но два объекта с одинаковым именем существовать в программе не могут. И какую переменную линкер должен выбрать? Случайную, а вторую - просто вышвырнуть из проекта? Линкер поступает проще: он сообщает программисту об ошибке, и программист должен решать, что выбросить, а что оставить...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.